修改嵌套属性数组before_save

时间:2014-03-08 21:10:43

标签: ruby-on-rails activerecord ruby-on-rails-4 nested-attributes

我试图在嵌套属性保存到我的数据库之前修改它们。这个想法是,如果有人已经在服装数据库中提交了具有给定cid的服装,我们应该拉出那个并将其用于当前协议。但是,通过调试,我发现嵌套属性数组根本没有变化。有什么想法吗?

谢谢! 马特

app/models/agreement.rb
class Agreement < ActiveRecord::Base
  before_save :get_costumes

  has_and_belongs_to_many :costumes, join_table: :agreement_costumes  
  accepts_nested_attributes_for :costumes, reject_if: proc { |attributes| attributes['cid'].blank? }

  has_many :drycleans
  accepts_nested_attributes_for :drycleans, allow_destroy: true, reject_if: :all_blank

  def get_costumes
    self.costumes.map! { |costume|
      unless Costume.where(cid: costume.cid).nil?
        Costume.where(cid: costume.cid).first
      end
    }
  end

end

1 个答案:

答案 0 :(得分:0)

你的除非条件永远不是true。使用where语句,您将始终获得ActiveRecord。而且空的ActiveRecord也不是nil

尝试将该条件更改为:

unless Costume.where(cid: costume.cid).count == 0

或者:

unless Costume.find_by_cid(costume.cid).nil?