Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 嵌套形式&;habtm_Ruby On Rails_Ruby_Has And Belongs To Many_Nested Forms - Fatal编程技术网

Ruby on rails 嵌套形式&;habtm

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,所

我试图保存到habtm关系中的联接表,但遇到问题

在我看来,我传入了一个组id,其中包含:

<%= 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