在创建父记录后自动创建关联记录

时间:2014-12-23 15:46:26

标签: ruby-on-rails activerecord model after-create

我正在构建一个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>

1 个答案:

答案 0 :(得分:1)

您的代码中有拼写错误。

以下内容:

self.participant.create

应该是:

self.participants.create

因为模型has_many :participants,而不是has_one :participant

我还看到您在模型中使用current_user@role。如果您希望控制器转发它们,那么这不会发生。在模型中无法访问该帮助程序和变量,即使您修复了上述错误,也会使您的方法崩溃。

如果您的项目以某种方式存储用户和角色,我建议您从self对象中创建参与者。