我正在尝试在SNS应用中创建一个拥有多个用户的群组。 通过Groups_users群组has_many用户。
这里我有一个表单来创建一个组,我想同时向组中添加成员(Groups_users)。 在创建组的同时,我成功地向该组添加了一个成员,但我无法向该组添加多个成员。
这是我的代码:
型号:
group.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
注意:
我认为我的代码不起作用,因为我将一个user_id数组作为一个user_id插入,但我不知道如何解决这个问题。
P.S。我在这里找到了一个类似的问题:Nested Simple Form in Rails4 - has many through, save multiple records
然而,我无法找到如何解决我的问题,因为我没有使用simple_form,我无法弄清楚如何弥补form_for中的差异。
答案 0 :(得分:0)
解决此问题的一种简单方法是使用nested_form gem。 https://github.com/ryanb/nested_form
如果您使用它,您可以通过以下编码添加或删除嵌套_。
<%= f.fields_for :tasks do |task_form| %>
<%= task_form.text_field :name %>
<%= task_form.link_to_remove "Remove this task" %>
<% end %>
<p><%= f.link_to_add "Add a task", :tasks %></p>
宝石的自述文件很容易理解,所以你也应该检查一下。
另外,如果您查看gem提供的Wiki,您可以根据需要了解如何自定义表单。