私は、ServiceRegionsのクラスが郵便番号との多対多の関係を持つモデルを構築したいと思います。つまり、ServiceRegionsは複数の郵便番号をカバーする可能性があり、重複する可能性があるため、同じ郵便番号を複数のServiceRegionsに関連付けることができます。Railsは非クラスのhas_manyアサーションを使用しますか?
私はZipCodeクラスを作成するのではなく、リレーションシップテーブルに直接郵便番号を格納したいと考えていましたが、コードを正しく動作させることができません。私は正常に関係を作成するコードを持っていましたが、できると思うように関連するzipの配列にアクセスすることはできませんでした。私はServiceRegionのインスタンスでショーを行うと、出力my_service_region.zipsにしようとすると
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
が、それは私にそれが関連のジッパーを見つけることができないというエラーを与える:
はここに関連するコードです。
Railsは、独自のモデルファイルを持つ定義されたクラスではない文字列やintのような基本型と多対多の関連付けを行うことを目的としていますか?
ありがとうございます@ルークコウェル。それはhas_manyが行く方法ではないという私の質問に答える。 zip-> service_regionの関連付けをテーブルにこれらの2つの列と一緒に格納してから、service_regionにメソッドを作成して、配列形式のzipを取得できるようにしてください。 – LikeMaBell
あなたの要件に基づいて、私はあなたが必要と思っています:service_region has_and_belongs_to_many:zips association。私は、より複雑なデータ型をデータベースに格納することを避けています。それは早すぎる最適化のような感じです。 –