我有以下型号:
class City < ActiveRecord::Base
has_many :cities_regions_relationships
has_many :regions, through: :cities_regions_relationships
end
class Region < ActiveRecord::Base
has_many :cities_regions_relationships
has_many :cities, through: :cities_regions_relationships
end
class CitiesRegionsRelationship < ActiveRecord::Base
belongs_to :city
belongs_to :region
validates :city_id, presence: true
validates :region_id, presence: true
end
我想要的是,如果没有与某个地区相关联的城市,就无法创建一个城市。但是,在尝试之前,我必须能够在尚未保存的城市上建立关系。
我在控制台中尝试了这个(已经创建了一个区域)
c = City.new(name: "Test")
c.cities_region_relationship.build(region_id: Region.first.id)
c.save
然而,这失败了,因为这个关系没有city_id(这是正常的,因为我还没有保存城市,它没有ID)。
我可以尝试其他方法,但我总会遇到同样的问题:如何在新对象上创建一个尚未保存在数据库中的关系?
如果您对我的初始问题有其他完全不同的解决方案(强制城市至少有一个区域),请不要犹豫,建议完全不同的东西。
答案 0 :(得分:0)
您无需构建cities_region_relationship
。通过将region_ids
传递给新的City
实例,这将为您创建cities_region_relationship
。
您可以在控制台中尝试:
c = City.new(name: "Test", region_ids: [an array of existing region ids])
c.save
对于验证,您可以定义一个新的验证方法,用于检查上面评论中SO帖子中提到的self.regions.blank?
。