我有一个'place_detail'模型,它有很多孩子'电子邮件'
has_many :emails, :dependent => :destroy
并在电子邮件模型中:
belongs_to :place_detail
现在在place_detail中,我想添加一封电子邮件来检查attribut'has_email' 所以我补充说:
before_save :check_if_has_email
...
def check_if_has_email
if emails.count >0
self.has_email = true;
else
self.has_email = false;
end
end
问题是,如果我创建了一个电子邮件子项,则属性has_email不会检查事件。我的理解是父母在>>孩子之前
如何在创建儿童电子邮件时在place_detail中检查我的has_email?
编辑: 我可以简单地将has_email布尔值放在像
这样的方法中def has_email?
if self.emails.count >0
return true
..
但是我更喜欢属性中的布尔值,因为我在很多范围内使用它,它会在应用程序中发生很大变化
答案 0 :(得分:1)
这将确保您的模型至少有一封电子邮件(将其放入您的模型文件中place_detail.rb
)
has_many :emails, :dependent => :destroy
validates :emails, :length => { :minimum => 1 }
编辑:
一个建议就是在需要时检查特征place_detail.emails
计数。如果你多次检查这样的数据,你可以像这样存储它
def has_email?
(result ||= self.emails.count) > 0
end
这样它只会检查一次数据库
答案 1 :(得分:0)
如果您被迫使用' has_email' place_detail模型中的属性,您只需将place_detail保存在Email控制器的Create方法中。
@email = Email.new(email_params)
@email.place_detail.save