rails嵌套属性创建,但不更新和不删除

时间:2016-09-09 13:23:49

标签: ruby-on-rails ruby-on-rails-4

我有以下模特:

class Company < ActiveRecord::Base
  has_and_belongs_to_many :people
  has_many :companies_people

  accepts_nested_attributes_for :companies_people, allow_destroy: true, reject_if: :all_blank
end

class CompaniesPerson < ActiveRecord::Base
  belongs_to :company
  belongs_to :person
  belongs_to :company_role
end

class Person < ActiveRecord::Base
end

class CompanyRole < ActiveRecord::Base
end

我正在尝试使用Company对象来更新它的companies_people相关对象。我面临的问题是我可以创建新的companies_people对象,但不能更新或删除现有对象。最令人激动的是,它不是另一个关于不允许或遗漏:id:_destroy参数的问题 - 我确实设置了那些,但仍然不能更新或删除现有关联。

EG。这项旨在将company_role_id1更新为2的调用完全被忽略了:

Company.first.update_attributes(companies_people_attributes: [{id: 1, person_id: 1, company_role_id: 2}])

PS。用Rails 4.2.4进行测试

2 个答案:

答案 0 :(得分:0)

这似乎是由于这种关联声明而发生的:

has_and_belongs_to_many :people

我最初将此关系定义为HABTM,但后来因为经常发生我需要访问连接表并创建相应的模型CompaniesPerson,但没有更新:people关联以通过has_many through。现在我发现将上述语句改为

has_many :people, through: :companies_people

或者只是完全注释掉它修复了嵌套属性不更新而不是删除的问题。哇,非常意外。

答案 1 :(得分:0)

我遇到了这个问题。原因是Rails不知道您的记录已经存在。 您只需在参数中添加:ID即可。