我试图更新has_many:通过与Rails 4中的强参数关联而没有成功。
这是我的模型:
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
在组视图中(创建/编辑)
<%= form_for(:group, :url => {:action => 'update', :group_id => @group.id}) do |f| %>
<th>New participant</th>
<td><%= f.collection_select(:members, @users, :id, :first_name) %></td>
<%= submit_tag("Update Group") %>
<% end %>
然后,在控制器中,我尝试使用强参数将新成员保存到数据库中:
def groupe_params
params.require(:group).permit(:user_id, :group_name, members: [:id])
end
但是用户没有保存在数据库中,我没有任何错误消息。
当我试着做的时候
group.members << user
通过ruby控制台,它成功了。
我已经找了几个小时的解决办法了我试着从这个问题中理解解决办法,但我还是被卡住了。
我试图检查控制器中:members变量的值是什么:
member_id = params[:members]
flash[:notice] = "member id = #{member_id} !!"
它总是空的:
member id = !!
但是,当我用强参数替换时:
def group_params
params.require(:group).permit(:user_id, :group_name, members: [:id])
end
通过
def group_params
params.require(:group).permit(:user_id, :group_name, :members)
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]
。这就是为什么打印member_id
失败的原因。我想你是想用group_params[:members]
:
member_id = group_params[:members]
flash[:notice] = "member id = #{member_id} !!"
第二个问题是
members
不是对象列表,因此指定members: [:id]
将不起作用期望参数如下group: {
members: [
{id: 1},
{id: 2}
]
}
您只传递了一个id列表,因此需要
members: []
,它需要the question you linked to描述的标量值列表。最后,您的
has_many
关联需要一个名为member_ids
的属性,而不是members
。因此,最终的强参数定义应该是:def group_params
params.require(:group).permit(:user_id, :group_name, member_ids: [])
end
这将允许您通过
Group
关系设置group.member_ids = [1,2,3]
的成员。似乎除了参数之外还有其他问题,因为您的
has_many
s有许多User
s到Group
,但是您的group_memberships
s有许多Group
s到User
除非您有其他的配置补偿,否则您希望使用同一个表,其中包含user_members
和:user_id
列,以使关系在两个方向上都正常工作。关于ruby-on-rails - 如何更新has_many:通过与Rails 4中的强参数关联,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31466462/