我一直在尝试在我的数据库中添加一个值,而不是替换它。
如果您要在更新/编辑表单中输入5作为值,我希望数据库为5加上数据库中已有的数据。因此,如果数据库已经有1次重新填充,则在表单中输入5将导致数据库中的6。
当将不同的:值放入更新表单时,我一直在破坏表单,并出现rails错误。不确定是否/如何在ruby表单的输入中传递函数。这个项目主要用Rails(5.1.5)的Ruby(2.4.1p111)编写。以下是控制器
def update
@waterbottle = Waterbottle.find(params[:id])
if @waterbottle.update(waterbottle_params)
redirect_to "/users/#{current_user.id}"
end
end
模式
create_table "waterbottles", force: :cascade do |t|
t.integer "volume"
t.integer "user_id"
t.integer "refills"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
更新表格是。
<%= form_for @waterbottle, :url => waterbottle_path(@waterbottle.id) do |f| %>
<p> How many times did you refill your bottle today? </p>
<%= f.text_field :refills, :value => @waterbottle.refills %>
<%= f.hidden_field :user_id, :value => current_user.id %></br>
<%= f.hidden_field :volume, :value => @waterbottle.volume %></br>
<%= f.submit "Refill Waterbottle" %>
<% end %>
非常感谢任何帮助。
答案 0 :(得分:1)
您可以在值部分中轻松地内联数学或其他函数:
<%= f.text_field :refills, :value => (@waterbottle.refills + 1) %>
请记住,如果您不更改值,通常不需要指定值。 (我在上面做了一些其他的风格和安全评论,关于你的其他rails代码。祝你好运!)
答案 1 :(得分:1)
让您在模型中使用before_update
回调。您可以通过refills_was
方法获取旧值。
class Waterbottle < ApplicationRecord
before_update :increase_fills
def increase_fills
if self.refills_changed?
self.refills = self.refills + self.refills_was
end
end
end
希望这能帮助您解决问题。