0

我有一个包含许多组的项目模型。一个组通过成员资格模型拥有许多用户。一个项目必须至少有一个组。创建新项目时,我必须创建它的默认组,并使当前用户成为成员。

我不想使用 ActiveRecord 回调,但我有兴趣了解使用它们的解决方案如何工作。我accepts_nested_attributes_for用来创建项目和默认组。

def create
  @project = Project.new(project_params)
  if @project.save
    @project.groups.first.members << current_user
    redirect_to @project
  else
    render 'new'
  end
end

这个动作存在三个问题:

  1. 没有交易。用户可能不会被添加到项目的默认组中。
  2. 这条线@project.groups.first.members << current_user不应该在控制器中。
  3. 它使用accepts_nested_attributes_for. 我不想使用它,但如果必须,我会继续使用它。
4

1 回答 1

0

项目.rb

def add_new_user(user_id)
  self.groups.first.members << User.find_by_id(user_id)
  self.groups.first.members.count == 1
end

控制器.rb

def create
  @project = Project.new(project_params)
  if @project.save && @project.add_new_user(current_user.id)
    redirect_to @project
  else
    render 'new'
  end
end
于 2013-08-09T14:07:25.320 回答