gpt4 book ai didi

ruby-on-rails - Rails : nested form, 创建多个子记录

转载 作者:太空宇宙 更新时间:2023-11-03 16:42:28 24 4
gpt4 key购买 nike

我正在尝试在具有多个用户的 SNS 应用程序中创建一个组。Group 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

Controller :

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

注意:

  • 如果我从 View 文件中删除 { multiple: true },它会起作用,但我想同时添加多个成员。
  • 我正在使用 devise gem,所以 current_user 是登录的用户。
  • mutual_followers:你关注的用户也关注你(在我的 User.rb 中定义,但我不想让我的问题太长)。

我认为我的代码不起作用,因为我插入了一组 user_id 作为一个 user_id,但我不知道如何解决这个问题。

附言我在这里发现了一个类似的问题:Nested Simple Form in Rails4 - has many through, save multiple records

但是,由于我没有使用 simple_form,我无法找到解决问题的方法,而且我无法弄清楚如何弥补 form_for 中的差异。

最佳答案

解决这个问题的一个简单方法是使用 nested_form gem。 https://github.com/ryanb/nested_form

如果您使用它,您只需像下面这样编写代码就可以添加或删除 nested_forms。

<%= 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 的 README 很容易理解,所以你也应该检查一下。

此外,如果您查看 gem 提供的 wiki,您可以知道如何根据需要自定义表单。

关于ruby-on-rails - Rails : nested form, 创建多个子记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42509712/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com