2016-09-30 60 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

相關問題