Rails与非类有很多关联吗?

时间:2011-08-10 13:27:50

标签: ruby-on-rails has-many

我想构建一个模型,其中一类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)进行多对多关联,而不是具有自己的模型文件的已定义类?

1 个答案:

答案 0 :(得分:2)

任何关联:has_many,belongs_to,has_many:虽然等,需要与活动记录的子类相关联。不是AR后代的对象不会有数据库支持与AR对象相关。

我认为您收到了“无法找到关联”错误,因为您指定的是:source =&gt; :压缩。你需要一个名为Zip的类。你有一个名为ZSrRelationship的类,这是rails所期望的,所以你应该只保留source选项。