该问题与嵌套属性无关。事实上,在这些示例中,您甚至根本没有使用嵌套属性。
在这个例子中:
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)