为什么这个类方法抛出一个错误:尝试调用私有方法`create'

时间:2011-12-20 16:55:46

标签: ruby-on-rails ruby-on-rails-3 activerecord

我在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?

我以为我可以通过?一个方法,它会检查它?

2 个答案:

答案 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?