Rails Многие ко многим Создать контроллер

и заранее спасибо за любую помощь, предлагаемую здесь. На самом деле я новичок в разработке рельсов и stackoverflow. Я создаю отношения «многие ко многим» и испытываю проблемы с некоторыми основами. Я хочу установить отношения между пользователями и группами.

Модели:

    class User < ActiveRecord::Base
      attr_accessible :name
      has_and_belongs_to_many :groups
    end

    class Group < ActiveRecord::Base
      attr_accessible :name
      has_and_belongs_to_many :users
    end

БД/мигрировать create_groups_users_join

class CreateGroupsUsersJoin < ActiveRecord::Migration
  def self.up
    create_table 'groups_users', :id => false do |t|
      t.column 'group_id', :integer
      t.column 'user_id', :integer
     end
   end
 def self.down
   drop_table 'groups_users'
 end
end

Я создал раскрывающийся список в форме моих пользователей с помощью этого кода.

true }) %>

контроллеры

def edit
  @user = User.find(params[:id])
  @groups = Group.all
  ...
end
  def new
  @user = User.new
  @groups = Group.all
  ...
end

Теперь я не знаю, что добавить в контроллер, чтобы обновить таблицу соединений при создании/редактировании/обновлении. Может ли кто-нибудь объяснить, что мне нужно изменить, чтобы это произошло? Спасибо.

Вот вывод ошибки, который я получаю сейчас:

 {"utf8"=>"✓",
    "authenticity_token"=>"pgyajCT23qQVMuS+MQgG6E7M7Q8AWjfGaYbe3q7QDSA=",
    "group"=>{"group_id"=>"1"},
    "user"=>{"name"=>"ymudfg"},
    "commit"=>"Create User"}

person fuller    schedule 11.01.2013    source источник
comment
Ваша модель выглядит хорошо. Можете ли вы объяснить, что именно хотите сделать??? Я имею в виду, хотите ли вы добавить пользователя в определенную группу или группу для пользователя в вашем контроллере?   -  person Rahul Tapali    schedule 11.01.2013
comment
Спасибо за ваш ответ. То, что я пытаюсь сделать прямо сейчас, - это создание пользователя. Созданный пользователь и выбранная группа добавляются в таблицу groups_users. На данный момент моя функциональность - это созданный пользователь, но ничего не добавлено в groups_users.   -  person fuller    schedule 11.01.2013


Ответы (3)


Вы можете добавить пользователя в группу, выполнив это в своем контроллере:

   user = User.find(params[:uid])
   group = Group.find(params[:gid])

   group.users <<  user  #Adding user to group

Для назначения группы пользователю:

   user.groups << group

РЕДАКТИРОВАТЬ: Согласно вашему комментарию

  class UsersController < ApplicationController
    def new
      @user = User.new
      @group = Group.all
    end

    def create
      @user = User.new(params[:user])
      @group = Group.find(params[:group][:group_id]) # As per log
      if @user.save
        @group.users << @user
      else
        render :new
      end
    end

    #Similarly you can implement edit
  end
person Rahul Tapali    schedule 11.01.2013
comment
В действии создания UsersController вам, вероятно, нужен User.new(params[:user]), а не find(). - person edralph; 11.01.2013
comment
Я очень ценю помощь, и мне очень жаль, потому что вы действительно правильно объясняете это для меня, но я получаю ошибку аргумента с этим неизвестным ключом: group_id. - person fuller; 11.01.2013
comment
Можете ли вы опубликовать параметры из журнала. Вы должны использовать имя раскрывающегося списка (тег выбора) вместо идентификатора группы. - person Rahul Tapali; 11.01.2013
comment
Добавил лог в исходный пост. Извините за этот беспорядок выше. - person fuller; 11.01.2013
comment
@clickit Теперь у меня есть новая ошибка, и я стесняюсь признать это. Я искал безрезультатно. Это неопределенный метод `users' для #‹Group:0x00000002d45358› Еще раз спасибо, что остались со мной в этом вопросе. - person fuller; 11.01.2013
comment
Неважно, что я сделал что-то исключительно глупое. Большое спасибо. - person fuller; 11.01.2013
comment
@fuller откройте консоль rails и попробуйте «Group.last.users». Что это дает? - person Rahul Tapali; 11.01.2013
comment
Групповая загрузка (0,3 мс) ВЫБЕРИТЕ группы.* ИЗ групп ORDER BY groups.id DESC LIMIT 1 User Load (0,4 мс) SELECT users.* ИЗ пользователей ВНУТРЕННЕЕ СОЕДИНЕНИЕ groups_users ON users.id = groups_users.user_id ГДЕ groups_users.group_id = 2 = › [#‹Идентификатор пользователя: 10, имя: сборка, created_at: 2013-01-11 15:37:08, updated_at: 2013-01-11 15:37:08›, #‹Идентификатор пользователя: 11, имя: сборка , created_at: 2013-01-11 15:38:44, updated_at: 2013-01-11 15:38:44›] - person fuller; 11.01.2013
comment
Сейчас все работает нормально?? То же самое мы делаем в контроллере, добавляя пользователя в группу. Попробуйте создать нового пользователя из консоли и выполните Group.last.users ‹‹ User.last - person Rahul Tapali; 11.01.2013
comment
Да все хорошо сейчас. Я чувствую, что многому научился, и действительно думаю, что рубин мне очень понравится после того, как я его освою. Спасибо еще раз. Вы были выдающимися! - person fuller; 11.01.2013

Связь между пользователями и группами автоматически обрабатывается rails, поэтому вы добавили has_and_belongs_to_many.

Если вы хотите добавить пользователя в группу, вы можете сделать:

@group.users.create(params[:user])

с другой стороны вы могли бы сделать:

@user.groups.create(params[:group])

чтобы найти группу пользователя, вы можете сделать:

@user.groups.find(params[:id])

person Khaled    schedule 11.01.2013

Теперь лучше использовать: имеет много сквозных ассоциаций чем has_and_belongs_to_many

person BKSpurgeon    schedule 29.12.2016