如何重构此控制器方法?

时间:2013-08-09 12:47:00

标签: ruby-on-rails ruby controller refactoring

我有一个项目模型,有很多组。 Group通过Membership模型拥有许多用户。项目必须至少有一个组。在创建新项目时,我必须创建其默认组,并使当前用户成为成员。

我不想使用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。我不想使用它,但如果必须,我会继续使用它。

1 个答案:

答案 0 :(得分:0)

project.rb

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

controller.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