如何修改Rails中的嵌套参数?

How to modify nested params in Rails?

我正在研究类似的 app.I 有 3 个模型:用户、组和 Relation.I 想制作一个表单,登录用户可以在其中创建一个组并邀请一所大学(其他用户注册在数据库中)。我正在使用 has_many 到 association.Here 是这些模型:

class Group < ApplicationRecord
  has_many :relations
  has_many :users, through: :relations

  accepts_nested_attributes_for :relations
end 

class Relation < ApplicationRecord
  belongs_to :group
  belongs_to :user
end

class User < ApplicationRecord
  attr_accessor :remember_token


  has_many :transactions, dependent: :destroy
  has_many :relations
  has_many :groups, through: :relations
  <some validation >

end

我的群组控制器

class GroupsController < ApplicationController

  def new
    @group = Group.new
    @group.relations.build
  end
  
  def create
    @group = Group.new(groups_params)
    if @group.save
      flash[:success] = "Group has been created!"
      redirect_to root_path
    else  
      flash[:danger] = "Something went wrong!"
      render 'groups/new'
    end 
  end 


  private
  def groups_params
    params.require(:group).permit(:group_name, :group_from, :group_to, 
                                  relations_attributes: Relation.attribute_names.map(&:to_sym) )
                                  #Relation.attribute_names.map(&:to_sym) this grabs all the column names
                                  #of the relations tabel, puts it in the array and maps each element with hash
                                  #[:id, :group_id, :user_id, :created_at, :updated_at] 
  end

end

以及我对“新”行动的看法

<%= provide(:title, "New Group") %>
<div class="row">
  <div class="col-md-6 col-md-offset-3">
    <%= form_for @group do |group| %>
      <%= group.label :group_name, "Group name"%>
      <%= group.text_field :group_name %>

      <%= group.label :group_from, "Group from"%>
      <%= group.date_field :group_from %>

      <%= group.label :group_to, "Group to"%>
      <%= group.date_field :group_to %>
      <!-- :relations is a symbol for assosiation between the group and user -->
      <%= group.fields_for :relations do |relations_form| %>
        <%= relations_form.label :user_id, "Member #1" %>
        <%= relations_form.text_field :user_id %>
      <% end %>

      <%= group.submit "Create a group!" %>
    <% end %>
  </div>
</div>

截图:https://i.stack.imgur.com/u1LDX.png

使用此代码,登录用户可以同时创建群组记录和关系记录,但它必须传递要邀请加入群组的用户 ID(例如:“7”而不是“John”- id 为 7 的用户名) 我想要实现的是获取传入“Member #1”field.Example 的用户名的 ID: 1.A 登录用户在“Member #1”字段中输入:“John” 2.Some 函数获取“John”的 id - 修改参数 3.if“John”存在于用户标签中然后保存组->创建组记录和关系记录。

我想我必须修改嵌套参数,但我不知道该怎么做。 谢谢你的帮助, 卢卡斯

您应该尝试使用 select 下拉菜单,而不是输入文本字段,您可以在其中选择现有成员。像这样它会向用户显示名称,但它会 select 发送给控制器的 ID。