使用has_many:通过和构建
我有三个模型,都是为了一个has_many:通过关系。 它们看起来像这样:
class Company < ActiveRecord::Base has_many :company_users, dependent: :destroy has_many :users, through: :company_users accepts_nested_attributes_for :company_users, :users end class CompanyUser < ActiveRecord::Base self.table_name = :companies_users #this is because this was originally a habtm relationship belongs_to :company belongs_to :user end class User < ActiveRecord::Base # this is a devise model, if that matters has_many :company_users, dependent: :destroy has_many :companies, through: :company_users accepts_nested_attributes_for :company_users, :companies end
这个加载很好,并且连接可以很好地用于查询。 但是,每当我做某事时
@company = Company.last @user = @company.users.build(params[:user]) @user.save #=> true @company.save #=> true
创建User
记录和CompanyUser
记录,但CompanyUser
记录中的company_id
字段设置为NULL
INSERT INTO `companies_users` (`company_id`, `created_at`,`updated_at`, `user_id`) VALUES (NULL, '2012-02-19 02:09:04', '2012-02-19 02:09:04', 18)
当你@company.users << @user
时它会做同样的事情
我确定我在这里做了一些蠢事,我只是不知道是什么。
你不能使用has_many:就像那样,你必须这样做:
@company = Company.last @user = User.create( params[:user] ) @company.company_users.create( :user_id => @user.id )
然后,您将正确定义关联。
更新
对于下面的注释,由于您已经有accepts_nested_attributes_for ,您的参数必须如下所示:
{ :company => { :company_users_attributes => [ { :company_id => 1, :user_id => 1 } , { :company_id => 1, :user_id => 2 }, { :company_id => 1, :user_id => 3 } ] } }
您可以自动为用户添加用户。
我怀疑你的params[:user]
参数,否则你的代码看起来很干净。 We can use build method with 1..n and n..n associations too
,请参见此处 。
我建议你首先确保你的模型关联工作正常,为此打开console
并尝试以下方法,
> company = Company.last => # > company.users => [] > company.users.build(:name => "Jake") => > # > company.save => true
现在,如果记录保存得很好,请调试传递给构建方法的参数。
快乐调试:)
- 如何使用has_many:through和honor:conditions创建新记录?
- Rails:has_many有额外的细节吗?
- activerecord通过关联找到
- Rails 3.2 has_many通过表单提交
- Rails:ActiveRecord :: HasManyThroughSourceAssociationNotFoundError:找不到源关联
- Rails4中的嵌套简单表单 – 有很多通过,保存多个记录
- Rails ActiveRecord:Three Table has_many through:associations
- Rails – 按连接表数据排序
- NameError:has_many通过关系的未初始化常量