Я пытаюсь создать группу в приложении SNS, в которой есть несколько пользователей. Группа has_many Users через Groups_users.
Здесь у меня есть форма для создания группы, и я хочу одновременно добавить участников (Groups_users) в группу. Мне удалось добавить одного участника в группу одновременно с созданием группы, но я просто не могу добавить в группу нескольких участников.
Вот мой код:
Модели:
группа.rb
class Group < ApplicationRecord
validates :name, presence: true, uniqueness: true
validates :owner_user_id, presence: true
has_many :groups_users, inverse_of: :group
has_many :users, through: :groups_users
accepts_nested_attributes_for :groups_users
has_many :group_posts
end
groups_user.rb
class GroupsUser < ApplicationRecord
belongs_to :group, inverse_of: :groups_users
belongs_to :user
validates :group, presence: true
validates :user_id, presence: true
end
Контроллеры:
groups_controller.rb
module Users
module Users
class GroupsController < BaseController
def index
@group = Group.new
@group.groups_users.build
@groups = Group.all
end
def create
group = Group.new(group_params)
if group.save!
redirect_to users_groups_path, notice: 'a new group created!'
else
redirect_to users_groups_path, notice: 'The selected group name has already been taken.'
end
end
private
def group_params
params.require(:group).permit(:name, :owner_user_id, groups_users_attributes: [:user_id])
end
end
end
end
Взгляды:
группы/index.html.slim
= form_for [:users, @group] do |f|
.field
= f.label :name, 'group name:'
= f.text_field :name, size: 15, maxlength: 20
= f.hidden_field :owner_user_id, value: current_user.id
.field
= f.fields_for :groups_users do |g|
= g.label :user_id, 'user name you want to add'
= g.select :user_id, options_for_select(current_user.mutual_followers.map { |user| [user.name, user.id] }), { }, { multiple: true }
.actions
= f.submit
Примечание:
- Если я удалю {multiple: true} из файла представления, это сработает, но я хочу добавить несколько участников одновременно.
- Я использую devise gem, поэтому current_user — это пользователь, вошедший в систему.
- взаимные_фолловеры: пользователь, за которым вы следите, который также следит за вами (определено в моем User.rb, но я не хочу делать свой вопрос слишком длинным).
Я думаю, что мой код не работает, потому что я вставляю массив user_id как один user_id, но я не знаю, как решить эту проблему.
P.S. Я нашел аналогичный вопрос здесь: Вложенная простая форма в Rails4 — много проходов, сохранение нескольких записей
Однако я не мог понять, как решить свою проблему, поскольку я не использую simple_form, и я не мог понять, как компенсировать эту разницу в form_for.