Rails 4 接受具有 has_one 关联的嵌套属性
Rails 4 Accept nested attributes with has_one association
我有一个关于 Rails 嵌套属性的问题。
我正在使用 Rails 4 并拥有此型号:
model Location
has_one parking_photo
has_many cod_photos
accepts_nested_attributes_for :parking_photo
accepts_nested_attributes_for :cod_photos
end
当我使用例如:
Location.find(100).update(cod_photo_ids: [1,2,3])
有效。
但是Location.find(100).update(parking_photo_id: 1)
不起作用。
不知道嵌套属性has_one和has_many有什么区别。
或者当我已经有子对象并且想要 link 父对象到子对象并且不想使用子对象更新时,我们对我的情况有什么解决方案。
谢谢。
问题与嵌套属性无关。事实上,在这些示例中,您甚至根本没有使用嵌套属性。
在这个例子中:
Location.find(100).update(cod_photo_ids: [1,2,3])
即使您将 accepts_nested_attributes_for :cod_photos
注释掉也会起作用,因为 cod_photo_ids=
setter 是由 has_many :cod_photos
创建的。
在另一个示例中,您在应该使用 belongs_to
的地方使用了 has_one
,或者只是普遍对如何为关联建模感到困惑。 has_one
将外键放在 parking_photos
table.
如果您想将 parking_photo_id
放在 locations
table 上,您可以使用 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
列。我真的建议你暂时忘记嵌套属性,只弄清楚基础知识 of how assocations work in 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)
我有一个关于 Rails 嵌套属性的问题。 我正在使用 Rails 4 并拥有此型号:
model Location
has_one parking_photo
has_many cod_photos
accepts_nested_attributes_for :parking_photo
accepts_nested_attributes_for :cod_photos
end
当我使用例如:
Location.find(100).update(cod_photo_ids: [1,2,3])
有效。
但是Location.find(100).update(parking_photo_id: 1)
不起作用。
不知道嵌套属性has_one和has_many有什么区别。
或者当我已经有子对象并且想要 link 父对象到子对象并且不想使用子对象更新时,我们对我的情况有什么解决方案。
谢谢。
问题与嵌套属性无关。事实上,在这些示例中,您甚至根本没有使用嵌套属性。
在这个例子中:
Location.find(100).update(cod_photo_ids: [1,2,3])
即使您将 accepts_nested_attributes_for :cod_photos
注释掉也会起作用,因为 cod_photo_ids=
setter 是由 has_many :cod_photos
创建的。
在另一个示例中,您在应该使用 belongs_to
的地方使用了 has_one
,或者只是普遍对如何为关联建模感到困惑。 has_one
将外键放在 parking_photos
table.
如果您想将 parking_photo_id
放在 locations
table 上,您可以使用 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
列。我真的建议你暂时忘记嵌套属性,只弄清楚基础知识 of how assocations work in 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)