如何使用 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
每次您设置用户的卡路里时,它会将其设置的值...添加到持久值...
我有一个表单,该表单为名为 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
每次您设置用户的卡路里时,它会将其设置的值...添加到持久值...