该问题与嵌套属性无关。事实上,在这些示例中,您甚至根本没有使用嵌套属性。
在这个例子中:
Location.find(100).update(cod_photo_ids: [1,2,3])
即使您注释掉setteraccepts_nested_attributes_for :cod_photos
是cod_photo_ids=
由has_many :cod_photos
.
在另一个示例中,您正在使用has_one
您应该使用的地方,belongs_to
或者只是通常对应该如何建模关联感到困惑。has_one
将外键放在parking_photos
桌子上。
如果你想把它parking_photo_id
放在locations
桌子上,你会使用belongs_to
:
class Location < ActiveRecord::Base
belongs_to :parking_photo
# ...
end
class ParkingPhoto < ActiveRecord::Base
has_one :location # references locations.parking_photo_id
end
当然,您还需要迁移才能实际添加locations.parking_photo_id
列。我真的建议您暂时忘记嵌套属性,而只是弄清楚关联如何在 Rails 中工作的基础知识。
如果你真的想建立反比关系并穿上location_id
你parking_photos
会这样设置:
class Location < ActiveRecord::Base
has_one :parking_photo
# ...
end
class ParkingPhoto < ActiveRecord::Base
belongs_to :location
validates_uniqueness_of :location_id
end
您可以通过以下方式重新分配照片:
Location.find(100).parking_photo.update(location_id: 1)