如何使用 rails 中的形式将整数添加到属性?

How do I add an integer to an attribute using a form in rails?

我有一个表单,该表单为名为 calories: 的用户属性采用整数,我希望将输入的整数添加到当前值,而不是替换它。所以我的问题基本上是:如何获取表格输入值并使用它来增加卡路里数量?

好的,这是我 users/show 视图中的表格:

<div class="row"> <div class="col-md-8"> <%= form_for @user do |f| %> <div class="form-group"> <%= f.label "Add calories" %> <%= f.number_field :calories, class: 'form-control'%> </div> <div class="form-group"> <%= f.submit "Add", class: 'btn btn-success' %> </div> <% end %> </div> </div>

以及我在 users_controller 中的更新操作:

def update
  @user = current_user
  @user.assign_attributes(user_params)
end

private

def user_params params.require(:user).permit(:calories) end

所以大概你有一个@user对象和一个params[:calories]值(你的名字可能不同)。在您的更新操作中,您将执行以下操作:

previous_calories = @user.calories
final_calories = previous_calories + params[:calories]
@user.update_attributes(calories: final_calories)

这就是如何在高层次上做到这一点。我实际上会像这样将其提取到用户的模型方法中:

def update_calories(calories)
  previous_calories = self.calories
  total_calories = previous_calories + calories
  self.update_attribute(calories: total_calories)
end

如果您总是将卡路里的新值添加到卡路里的持久值中,您可以覆盖用户模型中的 setter 以在保存用户记录时执行此操作。

def calories=(value)
  self[:calories] += value
end

我假设您在迁移中设置了卡路里的默认值?

t.integer :calories, default: 0

每次您设置用户的卡路里时,它会将其设置的值...添加到持久值...