2011-08-02 12 views
0

私はインベントリシステム用のRails 2.3.5プロジェクトを開発中です。主なオブジェクトは、StateZipcodeのようなオブジェクトが関連付けられたItemです。 Locationと多対多関連(HABTM)もあります。そのため、Itemは0,1、または多くを持つことができますLocationsRailsフィクスチャの多対多のシードデータの参照

そのデータは、このプロジェクトのすべてのインスタンスで同じであるように私は、StateZipcode、およびLocationデータをロードするためにdb/seeds.rbにシード・データを使用しています。

ユニットテストに役立つItemのフィクスチャを作成したいと考えています。これは私がこれまで持っているものです。

# items.yml 
widget1: 
    state_id: <%= State.find_by_name('Utah').id %> 
    zipcode_id: <%= Zipcode.find_by_name('00000').id %> 
    locations_id: <%= Location.find_by_name('123 Main Street').id %> 

state_idzipcode_id作業罰金。私の問題はlocations_id行です。私はfixtureファイルで多対多関連のidをどのように指定するのか分かりません。

答えて

1

多対多関連の場合、2つのテーブルを接続する中間テーブルが必要です。したがって、この場合、itemsテーブル、locationsテーブル、およびitem_idlocation_idの2つのカラム(具体的な場合に応じてより多くの場合があります)を持つテーブルitems_locationsがあります。

モデルでは、通常、この目的でhas_and_belongs_to_manyの関連付けを指定します。

この場合、itemsテーブルにはlocationsを参照するカラムがないため、フィクスチャにカラムを追加する必要はありません。しかし、どちらの場合も、結合テーブルのための個別のフィクスチャは必要ありません。この文書では、あなたの固定具に関連付けを定義する方法について説明します。

locations: location1, location2, location3 

を...そしてlocations.ymlで、これらの場所を定義します。

http://api.rubyonrails.org/v3.2.13/classes/ActiveRecord/Fixtures.html

つまり、あなたの固定具内にこのようなものを置きます固定具。

+0

私はこのような結合テーブルを持っています。しかし、どのようにフィクスチャの特定の場所を指定するのですか? – rlandster

+0

私は私の答えを編集しました。ドキュメントには、 'has_and_belongs_to_many'に必要な情報が含まれています。 –

+0

ロケーションはseeds.rbプロセスによってロードされるので、locations.ymlのフィクスチャファイルはありません。実際、私は種のデータが上書きされるようなものを持っているとは思いません。 – rlandster

0

この古い質問を残念に思って申し訳ありませんが、私は同じ問題(データは既にシードによってデータベースに入っています)を見つけて、このハックで修正することができましたが、これはうまく動作しません。

# items_locations.yml 
some_relation: 
    item_id: <%= Item.find_by_name("some name").id %> 
    location_id <%= Location.find_by_name('123 Main Street').id %> 
関連する問題