簡體   English   中英

在Rails固定裝置中引用多對多種子數據

[英]Referring to many-to-many seeded data in a Rails fixture

我正在為庫存系統開發Rails 2.3.5項目。 主要對象是Item ,具有相關的對象,例如StateZipcode 它還具有與Location多對多關聯(HABTM); 因此,一個Item可以具有零個,一個或多個Locations

我用的種子數據db/seeds.rb加載StateZipcodeLocation數據,該數據是這個項目的所有實例相同。

我想為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行。 我不知道如何在夾具文件中指定多對多關聯的ID。

對於多對多關聯,您需要一個連接兩個表的中間表。 因此,在這種情況下,您將具有一個items表,一個locations表和第三個表items_locations ,該表具有兩列item_idlocation_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM