1

アプリケーションで新しいグループを作成するときに、ログインしているユーザー (Devise) を自動的に関連付けたいと考えています。後でさらにユーザーをグループに追加することもできます。1 人のユーザーが複数のグループを持つことができます。1 つのグループに多くのユーザーを含めることができます。

作成時にログイン ユーザーを関連付けるにはどうすればよいですか?

私のグループ.rb:

class Group < ActiveRecord::Base
    has_and_belongs_to_many :users
    has_and_belongs_to_many :clients
end

groups_controller.rb (作成)

  def create
    @group = Group.new(group_params)
    @group.users.id = current_user.id

    respond_to do |format|
      if @group.save
        format.html { redirect_to @group, notice: 'Group was successfully created.' }
        format.json { render action: 'show', status: :created, location: @group }
      else
        format.html { render action: 'new' }
        format.json { render json: @group.errors, status: :unprocessable_entity }
      end
    end
  end

および groups_controller.rb の group_params

def group_params
      params.require(:group).permit(:name, { :user_ids => [] },)
    end

私のschema.rbには以下が含まれています:

  create_table "groups", force: true do |t|
    t.string   "name"
    t.string   "background"
    t.integer  "clocktype"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

  create_table "groups_users", id: false, force: true do |t|
    t.integer "group_id"
    t.integer "user_id"
  end

  add_index "groups_users", ["group_id"], name: "index_groups_users_on_group_id"
  add_index "groups_users", ["user_id"], name: "index_groups_users_on_user_id"
  create_table "users", force: true do |t|
    t.string   "first_name"
    t.string   "last_name"
    t.string   "email"
    t.string   "password"
    t.string   "avatar"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.string   "encrypted_password",     default: "", null: false
    t.string   "reset_password_token"
    t.datetime "reset_password_sent_at"
    t.datetime "remember_created_at"
    t.integer  "sign_in_count",          default: 0
    t.datetime "current_sign_in_at"
    t.datetime "last_sign_in_at"
    t.string   "current_sign_in_ip"
    t.string   "last_sign_in_ip"
  end
4

3 に答える 3

4

以下は、作成されたグループに現在のユーザーを追加します。

# In controller after @group.save
@group.users << current_user

詳細については、関連付けメソッドのドキュメントを参照してください。

于 2013-10-08T07:00:25.150 に答える
1

@group.user_ids = [現在のユーザー.id]

于 2013-10-08T06:53:36.247 に答える
0

これを試して:-

@group = Group.new(group_params)
@group.users = User.where(:id => current_user.id)
@group.save
于 2013-10-08T07:01:45.070 に答える