我想构建一个模型,其中一类ServiceRegions与邮政编码具有多对多的关系。也就是说,ServiceRegions可能涵盖多个邮政编码,并且它们可能会重叠,因此相同的邮政编码可能与多个ServiceRegions相关联。
我希望将邮政编码直接存储在关系表中而不是创建ZipCode类,但我无法使代码正常工作。我成功地获得了创建关系的代码,但是我无法像人们期望的那样访问相关拉链数组。
以下是相关代码:
class ServiceRegion < ActiveRecord::Base
has_many :z_sr_relationships, :dependent => :destroy,
:foreign_key => :service_region_id
has_many :zips, :through => :z_sr_relationships, :source => :zip
def includes_zip!(zip)
z_sr_relationships.create!( :zip_id => zip, :service_region_id => self.id)
end
end
class ZSrRelationship < ActiveRecord::Base
attr_accessible :service_region_id, :zip
belongs_to :service_region, :class_name => "ServiceRegion"
validates :zip, :presence => true
validates :service_region_id, :presence => true
end
当我在ServiceRegion的一个实例上进行演示并尝试输出my_service_region.zips时,它会给我一个错误,它无法找到关联拉链。
Rails是否意味着允许您与基本类型(如字符串或int)进行多对多关联,而不是具有自己的模型文件的已定义类?
答案 0 :(得分:2)
任何关联:has_many,belongs_to,has_many:虽然等,需要与活动记录的子类相关联。不是AR后代的对象不会有数据库支持与AR对象相关。
我认为您收到了“无法找到关联”错误,因为您指定的是:source =&gt; :压缩。你需要一个名为Zip的类。你有一个名为ZSrRelationship的类,这是rails所期望的,所以你应该只保留source选项。