1

Когда я создаю новую группу в своем приложении, я хочу, чтобы зарегистрированный пользователь (Devise) был связан с автоматически. В дальнейшем пользователи могут быть добавлены в группу. Один пользователь может иметь много групп. У одной группы может быть много пользователей.имеет и принадлежит многим рельсам 4

Как связать зарегистрированного пользователя при создании?

Мой group.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 

И group_params от groups_controller.rb

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

После добавит текущего пользователя в созданную группу:

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

Смотрите метод ассоциации docs для получения дополнительной информации.

+0

Как шарм. Благодаря! – CaptainCarl

1

@ group.user_ids = [current_user.id]

+0

Ваш ответ является правильным. Однако ответ Тилхома кажется менее трудоемким. Спасибо, тем не менее! – CaptainCarl

0

Попробуйте это: -

@group = Group.new(group_params) 
@group.users = User.where(:id => current_user.id) 
@group.save 
Смежные вопросы