加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 嵌套形式和habtm

发布时间:2020-12-17 02:27:05 所属栏目:百科 来源:网络整理
导读:我试图以habtm关系保存到联接表,但我遇到了问题. 从我的角度来看,我传入一个组ID: %= link_to "Create New User",new_user_url(:group = 1) % # User model (user.rb)class User ActiveRecord::Base has_and_belongs_to_many :user_groups accepts_nested_a
我试图以habtm关系保存到联接表,但我遇到了问题.

从我的角度来看,我传入一个组ID:

<%= link_to "Create New User",new_user_url(:group => 1) %>
# User model (user.rb)
class User < ActiveRecord::Base  
  has_and_belongs_to_many :user_groups
  accepts_nested_attributes_for :user_groups
end
# UserGroups model (user_groups.rb)
class UserGroup < ActiveRecord::Base
  has_and_belongs_to_many :users
end
# users_controller.rb
def new
  @user = User.new(:user_group_ids => params[:group])
end

在新用户视图中,我可以访问User.user_groups对象,但是当我提交表单时,它不仅不会保存到我的连接表(user_groups_users)中,而且该对象不再存在.所有其他物品和除用户组外,我的User对象的属性是持久的.

我刚刚开始学习rails,所以也许我在这里概念性地遗漏了一些东西,但我一直在努力解决这个问题.

解决方法

您是否考虑过仅将用户添加到控制器中的组,而不是使用accepts_nested_attributes_for?这样你就不需要来回传递user_group_id了.

在users_controller.rb中:

def create
  @user = User.new params[:user]
  @user.user_groups << UserGroup.find(group_id_you_wanted)
end

通过这种方式,您还可以阻止人们对表单进行处理,并将自己添加到他们想要的任何组中.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读