我正在构建一个Project应用程序,我需要在创建项目记录时自动生成1个参与者。
My model
class Project < ActiveRecord::Base
has_many :participants, dependent: :destroy, inverse_of: :project
after_create :build_a_role
private
def build_a_role
self.participant.create!(user_id: current_user.id, level: 1, participant_cat: @role.id, added_by: current_user.id)
end
end
当我尝试这个时,我收到了这个错误:
undefined method `participant' for #<Project:0x007fb402707250>
答案 0 :(得分:1)
您的代码中有拼写错误。
以下内容:
self.participant.create
应该是:
self.participants.create
因为模型has_many :participants
,而不是has_one :participant
我还看到您在模型中使用current_user
和@role
。如果您希望控制器转发它们,那么这不会发生。在模型中无法访问该帮助程序和变量,即使您修复了上述错误,也会使您的方法崩溃。
如果您的项目以某种方式存储用户和角色,我建议您从self
对象中创建参与者。