[英]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.