更新Rails中的嵌套资源,更改其父级

时间:2012-03-13 13:17:23

标签: ruby-on-rails ruby-on-rails-3 activerecord nested-attributes

我的应用程序中有一个非常具体的场景,用户必须将REGIONS设置为TERRITORY。

所以在我的路线文件中我声明了嵌套资源:

resource Territory
    resource Region
end

在Territory模型中,我有:

class Territory
   has_many :regions, :dependent => :destroy
   accepts_nested_attributes_for :regions
end

对于这种情况,我需要用户能够通过更新区域模型中的territory_id来重新划分区域之间的区域。

所以,如果我创建一个名为“East”的区域,然后将区域“New York”和“New Jersey”分配给它,我应该能够创建另一个区域,然后将“New York”分配给它并且应用程序应该只将区域的territory_id更改为新的。

所有逻辑都在地域控制器中(我实际上没有区域控制器),有一小组静态可能区域(西班牙省份),用户可以在编辑区域时添加或删除区域。我需要的是,当用户向区域添加区域并且该区域已经分配到另一个区域时,我不想创建新区域,而是希望使用rails来更改区域的territory_id。

每当我尝试这样做时,我都会收到以下错误:

无法为ID = 14

的地区找到ID = 101的地区

任何帮助?

1 个答案:

答案 0 :(得分:-2)

class Region < ActiveRecord::Base
  belongs_to :territory
end

old_territory = Territory.create :name => "East"
new_territory = Territory.create :name => "other"
new_york = old_territory.regions.create :name => "New York"
new_york.update_attributes :territory => new_territory