Ruby on rails 如何更新:通过与Rails 4中的强参数关联

Ruby on rails 如何更新:通过与Rails 4中的强参数关联,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,我试图通过与Rails 4中的强参数关联来更新has_many:但没有成功。 这是我的模型: User has_many :group_owner, :class_name => "Group" has_many :group_memberships has_many :memberships, :through => :group_memberships, :class_name => "Group" end Group belongs_to :owner,

我试图通过与Rails 4中的强参数关联来更新has_many:但没有成功。 这是我的模型:

User
  has_many :group_owner, :class_name => "Group"
  has_many :group_memberships
  has_many :memberships, :through => :group_memberships, :class_name => "Group"
end

Group
  belongs_to :owner, :class_name => "User", :foreign_key => "user_id"
  has_many :user_members
  has_many :members, :through => :user_members, :class_name => "User"
end 
在组视图中(创建/编辑)

但是用户没有保存在数据库中,我没有任何错误消息。 当我试着去做

 group.members << user
它总是空的:

 member id = !!
但是,当我在强参数中替换时:

def group_params
  params.require(:group).permit(:user_id, :group_name, members: [:id])
end

我得到以下错误:

undefined method `each' for "1":String

{"utf8"=>"✓",
 "authenticity_token"=>"GxCd==",
 "group"=>{"name"=>"G7",
 "members"=>"1"},
 "commit"=>"Update Group",
 "group_id"=>"4"}
这表明:members变量不是空的


欢迎任何帮助。谢谢。

根据您输入的参数,
params[:members]
不存在-它位于
params[:group][:members]
中。这就是为什么打印
成员id
的尝试不起作用的原因。我怀疑您打算使用
组参数[:members]

member_id = group_params[:members]
flash[:notice] = "member id = #{member_id} !!"
第二个问题是
members
不是对象列表,因此指定
members:[:id]
将不起作用。这需要像这样的参数

group: {
  members: [
    {id: 1},
    {id: 2}
  ]
}
您只传递了一个ID列表,因此需要
成员:[]
,这需要一个标量值列表,正如所描述的那样

最后,您的
有许多
关联将期望一个名为
成员ID
的属性,而不是
成员
。因此,最终的强参数定义应为:

def group_params
  params.require(:group).permit(:user_id, :group_name, member_ids: [])
end
这将允许您通过
组设置
组的成员。成员ID=[1,2,3]
来自
具有多个
关系



看起来可能存在参数以外的问题,因为您的
用户
s通过
组成员
拥有许多
s,但您的
s通过
用户成员
拥有许多
用户
s。除非您有其他配置,否则您希望使用与
:user\u id
:group\u id
列相同的表,以使关系在两个方向上都正常工作。

非常感谢您的解释!
undefined method `each' for "1":String

{"utf8"=>"✓",
 "authenticity_token"=>"GxCd==",
 "group"=>{"name"=>"G7",
 "members"=>"1"},
 "commit"=>"Update Group",
 "group_id"=>"4"}
member_id = group_params[:members]
flash[:notice] = "member id = #{member_id} !!"
group: {
  members: [
    {id: 1},
    {id: 2}
  ]
}
def group_params
  params.require(:group).permit(:user_id, :group_name, member_ids: [])
end