【问题标题】:How to get the values from a form before_update?如何从表单 before_update 中获取值?
【发布时间】:2015-07-16 07:11:40
【问题描述】:

我需要从表单中获取值并在表单更新之前对其进行调整。

我有一个项目,一个项目有很多主要组,主要组有很多交易。

因此,在我保存表单之前,我想检查 Trades 中的成本输入是否有任何值,如果有,其总和应该会覆盖 Main Groups 的成本值。

这就是我所拥有的:

class MainGroup < ActiveRecord::Base
    belongs_to :project

    has_many :trades
    accepts_nested_attributes_for :trades, :reject_if => :all_blank, :allow_destroy => true 

    private

    before_update do
        if (self.trades.sum(:cost) != 0)
            self.cost = self.trades.sum(:cost)
        else
            self.cost = self.cost       
        end
    end

end

唯一的问题是它使用数据库中的当前值而不是表单中的新值。

谢谢。

【问题讨论】:

  • 您可以编写一个单独的方法并通过(比如@main_group)对象调用它。在此之前,您必须将 @main_group.trades 设置为要更新的值,然后 self 将具有来自 form 而不是来自 DB
  • 嗨,谢谢,我是一个 Rails 菜鸟,但这有点道理。

标签: ruby-on-rails nested-forms


【解决方案1】:
before_save :update_cost_from_trades

private

def update_cost_from_trades  
  unless trades.sum(:cost).is_zero?  
    self.cost = trades.sum(:cost)
  end  
end

【讨论】:

  • 您好,非常感谢。我得到一个未定义的方法“is_zero?”对于 7000:Fixnum。我假设我只需要给交易成本字段一个默认值 0 我尝试过但错误仍然存​​在。
  • 我可以使用除非 trades.sum(:cost).is_blank?但它仍然使用数据库中的值而不是表单。
  • 是的,我认为成本数据类型是整数或浮点数,在这种情况下默认值应该是 0 和 null false。
猜你喜欢
  • 1970-01-01
  • 2021-06-20
  • 2012-07-19
  • 2018-10-03
  • 1970-01-01
  • 1970-01-01
  • 2016-04-22
  • 2014-01-27
  • 2018-04-28
相关资源
最近更新 更多