0

Railsアプリには、次のオブジェクトがあります。

Group: has_many users through group_membership
GroupMembership: belongs_to user, belongs_to group
User: has_many groups through group_membership

ユーザーはグループを作成できます。この場合、ユーザーをグループに自動的に追加したいと思います。私のGroupsControllerには、次のものがあります(ExplicitResourcesを拡張しています)。

super do |success, failure|
  if success
    GroupMembership.create(:user_id => current_user, :group_id => ???)
  ...
end

問題は、作成したオブジェクトを取得できないことsuperです。これを行う方法はありますか?または、LockGroupモデルを変更して、常にこの関連付けを実行する方法はありますか?

4

2 に答える 2

1

コールバックが発生したとき、コントローラーには、作成されたグループに対応する標準インスタンス変数がすでにあります@group

class GroupController < InheritedResources::Base

  def create
    super do |success, failure|
      if success
        GroupMembership.create(:user_id => current_user, :group_id => @group.id)
      ...
    end
  end

end
于 2012-10-17T00:51:49.100 に答える
0

あなたのグループに与えられたparamsキーは:groupだと思います。次に、モデルでnested_attributes_forオプションを使用できます。次に、作成アクションからbeforeフィルターでそれらを設定できます。

class User < ActiveRecord::Base
  accept_nested_attributes_for :group_membership
end

# on your controller
before_filter :add_user, :on => [:create]

def add_user
  params[:group][:group_membership_attributes] = {}
  params[:group][:group_membership_attributes][:user] = current_user
end

または、ユーザー初期化でグループメンバーシップを構築します。

class User < ActiveRecord::Base
  def after_initialize
    build_group_membership
  end
end


# on your controller
before_filter :add_user, :on => [:create]

def add_user
  params[:group][:user] = current_user
end

そしてそれは自動的に機能するはずです。

于 2012-10-16T17:00:08.490 に答える