Ruby on rails 如何更新:通过与Rails 4中的强参数关联
我试图通过与Rails 4中的强参数关联来更新has_many:但没有成功。 这是我的模型: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,
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