如何使用rails中的表单向属性添加整数?

时间:2016-09-30 20:14:08

标签: ruby-on-rails attributes update-attributes

我有一个表单,它接受一个名为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

2 个答案:

答案 0 :(得分:0)

所以假设你有@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

答案 1 :(得分:0)

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

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

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

t.integer :calories, default: 0

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

enter image description here