2016-09-30 64 views
-1

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

好了,所以这里是我的用户/节目形式来看:

<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

+0

请分享一些代码... – 7urkm3n

+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 
+0

这看起来像我在找什么。所以我尝试了更新操作中的第一部分代码,并在尝试添加卡路里时出现此错误。 “无法强制进入Fixnum”的线路'final_calories = previous_calories + params [:calories]' –

+0

这意味着你的参数[:卡路里]是零或你的self.calories是零。你的表格看起来不错,所以我会假设后面的。你可以将'previous_calories = self.calories'改成'previous_calories = self.calories || 0',如果你的参数是正确的,它应该消除错误。正如Eric所建议的那样,使用默认值0初始化卡路里可能是一个好主意,在这种情况下,您不需要上述代码。 –

+1

啊,所以我遇到的问题是与params。我需要添加'[:user]'。现在它起作用了。谢谢你的帮助! –

0

如果你总是会增加热量的新价值,以热量的持久价值,可以覆盖在用户模式的setter执行当用户记录被保存时。

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

我假设你在迁移中设置了一个默认卡路里?

t.integer :calories, default: 0 

设置了用户的卡路里时,它都会将增加它被设置到...对持久性价值的价值...

enter image description here

相关问题