Rails accepted_nested_attributes_for。使用reject_if通过使用父对象的属性来拒绝对象

时间:2013-03-27 16:37:49

标签: ruby-on-rails ruby

我在轨道上有两个型号。 第一个是患者模型

class Patient

attr_accessible :name, :age, :sex, :female_attributes
has_one :female, dependent => :destroy
accepts_nested_attributes_for :female, allow_destroy => true

end

第二个模型为女性患者提供额外信息

class Female
belongs_to :patient
attr_accessible :patiend_id, :pregrnant_now: :childbirths
end

注意:我没有创建数据库架构,我无法对其进行更改。

所以我的问题是:如何通过检查患者对象中的:sex属性来拒绝女性对象被保存在数据库中?

我试过

reject_if => lambda { |a| a['sex'].to_i == 0 ) }

但它没有用。 (性别是一个整数,男性为0,女性为1)

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

我知道这是旧的,但我遇到了同样的问题。您可以使用reject_if并在患者模型中传递符号。

class Patient

  attr_accessible :name, :age, :sex, :female_attributes
  has_one :female, dependent => :destroy
  accepts_nested_attributes_for :female,
    reject_if: :female_patient?, 
    allow_destroy => true

  def female_patient?
    self.sex.to_i == 1
  end
end