繁体   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