Ruby on rails 嵌套形式&;habtm
我试图保存到habtm关系中的联接表,但遇到问题 在我看来,我传入了一个组id,其中包含:Ruby on rails 嵌套形式&;habtm,ruby-on-rails,ruby,has-and-belongs-to-many,nested-forms,Ruby On Rails,Ruby,Has And Belongs To Many,Nested Forms,我试图保存到habtm关系中的联接表,但遇到问题 在我看来,我传入了一个组id,其中包含: <%= link_to "Create New User", new_user_url(:group => 1) %> 在新用户视图中,我可以访问user.user\u groups对象,但是当我提交表单时,它不仅不会保存到我的联接表(user\u groups\u users)中,而且对象不再存在。除了用户组之外,我的用户对象的所有其他对象和属性都是持久的 我刚开始学习rails,所
<%= link_to "Create New User", new_user_url(:group => 1) %>
在新用户视图中,我可以访问user.user\u groups对象,但是当我提交表单时,它不仅不会保存到我的联接表(user\u groups\u users)中,而且对象不再存在。除了用户组之外,我的用户对象的所有其他对象和属性都是持久的
我刚开始学习rails,所以可能在概念上我遗漏了一些东西,但我一直在努力解决这个问题。在users\u controller.rb中,您的创建方法是什么样的 如果在视图中使用字段_进行构造,例如:
<% user_form.fields_for :user_groups do |user_groups_form| %>
您应该能够将参数[:user](或任何它是什么)传递给user.new(),它将处理嵌套属性。您是否考虑过将用户添加到控制器中的组中,而不是使用accepts\u nested\u attributes\u?这样,您就不需要来回传递用户组id 在users_controller.rb中:
def create
@user = User.new params[:user]
@user.user_groups << UserGroup.find(group_id_you_wanted)
end
def创建
@user=user.new参数[:user]
@user.user_组扩展@jimworm的答案:
groups_hash = params[:user].delete(:groups_attributes)
group_ids = groups_hash.values.select{|h|h["_destroy"]=="false"}.collect{|h|h["group_id"]}
这样,您就将散列从params散列中拉出,并仅收集ID。现在,您可以单独保存用户,如:
@user.update_attributes(params[:user])
并在一行中分别添加/删除他的组ID:
# The next line will add or remove items associated with those IDs as needed
# (part of the habtm parcel)
@user.group_ids = group_ids
当您提交表单时,您调用create
method,对吗?你能发布这个方法的代码吗?自从我最初发布这个问题以来,我学到了很多。这正是我现在使用的方法。
groups_hash = params[:user].delete(:groups_attributes)
group_ids = groups_hash.values.select{|h|h["_destroy"]=="false"}.collect{|h|h["group_id"]}
@user.update_attributes(params[:user])
# The next line will add or remove items associated with those IDs as needed
# (part of the habtm parcel)
@user.group_ids = group_ids