[英]Referring to many-to-many seeded data in a Rails fixture
我正在為庫存系統開發Rails 2.3.5項目。 主要對象是Item
,具有相關的對象,例如State
和Zipcode
。 它還具有與Location
多對多關聯(HABTM); 因此,一個Item
可以具有零個,一個或多個Locations
。
我用的種子數據db/seeds.rb
加載State
, Zipcode
和Location
數據,該數據是這個項目的所有實例相同。
我想為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_id
和zipcode_id
可以正常工作。 我的問題是locations_id
行。 我不知道如何在夾具文件中指定多對多關聯的ID。
對於多對多關聯,您需要一個連接兩個表的中間表。 因此,在這種情況下,您將具有一個items
表,一個locations
表和第三個表items_locations
,該表具有兩列item_id
和location_id
(或根據具體情況可能更多)。
在模型中,通常會為此指定一個has_and_belongs_to_many
關聯。
在這種情況下, items
表沒有任何引用locations
列,因此您無需在燈具中添加一個。 但是,您也不需要連接表使用單獨的夾具。 本文檔說明了如何在燈具中定義關聯:
http://api.rubyonrails.org/v3.2.13/classes/ActiveRecord/Fixtures.html
因此,您需要在夾具中放入以下內容:
locations: location1, location2, location3
...然后在locations.yml
裝置中定義這些位置。
抱歉,我想出了這個老問題,但我偶然發現了一個相同的問題(通過播種已將數據存入數據庫),只能通過此hack對其進行修復,該方法可以工作,但非常丑陋,並且容易出錯:
# items_locations.yml
some_relation:
item_id: <%= Item.find_by_name("some name").id %>
location_id <%= Location.find_by_name('123 Main Street').id %>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.