我在after_save回调中运行以下方法时遇到错误
ApprovalsController#update中的NoMethodError 尝试调用私有方法`create'
def create_next_approval
self.recommendation.create :email => self.next_approver_email #if next_approver_email? && recently_approved?
end
这种方法一般都适合我。我正在尝试使用属性创建一个新对象after_save:next_approver_email。
我还必须注释掉该方法的第二部分,因为它返回了一个no方法错误:next_approver_email?
我以为我可以通过?一个方法,它会检查它?
答案 0 :(得分:1)
很难说清楚,但这是一个理论:
如果你有推荐的has_one关系,你应该调用create_recommendation,而不是在adv.create:
self.create_recommendation :email=>self.next_approver_email #if next_approver_email? && recently_approved?
http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-has_one
答案 1 :(得分:1)
如果您的模型已定义为has_many :recommendations
,那么您必须使用复数形式的单词,例如:
self.recommendations.create :email => self.next_approver_email
关于检查电子邮件 - 正如评论者所提到的,你可以使用空的?或(更好的)礼物?例如:
self.recommendations.create :email => self.next_approver_email if next_approver_email.present? && recently_approved.present?