1

我正在构建一个项目应用程序,我需要在创建项目记录时自动生成 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>
4

1 回答 1

2

您的代码中有错字。

以下:

self.participant.create

应该:

self.participants.create

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

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

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

于 2014-12-23T15:49:15.737 回答