0

多くのグループを持つプロジェクト モデルがあります。グループには、メンバーシップ モデルを通じて多くのユーザーがいます。プロジェクトには少なくとも 1 つのグループが必要です。新しいプロジェクトを作成するときは、デフォルト グループを作成し、現在のユーザーをメンバーにする必要があります。

私は 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

このアクションには 3 つの問題があります。

  1. 取引なし。ユーザーがプロジェクトのデフォルト グループに追加されない場合があります。
  2. この行@project.groups.first.members << current_userはコントローラに含めるべきではありません。
  3. を使用していますaccepts_nested_attributes_for。私はそれを使用しないことを好みますが、必要に応じて使用し続けます。
4

1 に答える 1

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
于 2013-08-09T14:07:25.320 に答える