我可以在Rails DB中添加现有值,而不是替换它吗?

时间:2018-04-04 00:25:08

标签: ruby-on-rails ruby forms

我一直在尝试在我的数据库中添加一个值,而不是替换它。

如果您要在更新/编辑表单中输入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 %>

非常感谢任何帮助。

2 个答案:

答案 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

希望这能帮助您解决问题。