【发布时间】:2014-06-23 13:56:24
【问题描述】:
我正在使用 rails 4.1.0 编写一个简单的应用程序。我创建了两个模型,分别称为 Serie 和 Event,它们之间具有一对多的关系(就像一个 Serie 有许多事件一样)。
class Serie < ActiveRecord::Base
has_many :events
end
class Event < ActiveRecord::Base
belongs_to :serie
end
我为这些模型创建了以下夹具文件:
#series.yml
---
Serie1:
name: Whatever
#events.yml
---
EventSerie11:
date: 2013-01-01
value: '124.4'
serie: Serie1
EventSerie12:
date: 2013-02-01
value: '124.2'
serie: Serie1
问题是当我使用rake db:fixtures:load 加载这些固定装置时,我得到了错误的事件对象的外键:
$ rails c
Loading development environment (Rails 4.1.0)
2.1.1 :001 > Serie.first.id
Serie Load (0.2ms) SELECT "series".* FROM "series" ORDER BY "series"."id" ASC LIMIT 1
=> 10
2.1.1 :002 > Serie.first.events.count
Serie Load (0.3ms) SELECT "series".* FROM "series" ORDER BY "series"."id" ASC LIMIT 1
(0.2ms) SELECT COUNT(*) FROM "events" WHERE "events"."serie_id" = ? [["serie_id", 10]]
=> 0
2.1.1 :003 > Event.first.serie
Evento Load (0.2ms) SELECT "events".* FROM "events" ORDER BY "events"."id" ASC LIMIT 1
Serie Load (0.3ms) SELECT "series".* FROM "series" WHERE "series"."id" = ? LIMIT 1 [["id", 627975337]]
=> nil
2.1.1 :004 > Evento.first.serie_id
Evento Load (0.4ms) SELECT "eventos".* FROM "eventos" ORDER BY "eventos"."id" ASC LIMIT 1
=> 627975337
所以你看到所有的固定装置都在加载,但是事件记录被分配了一个不正确的 serie_id 外键(因为我使用 sqlite 进行开发,所以没有约束检查)。据我所知,每次重置数据库并加载灯具时,Serie 记录都会获得一个新的 id,但每个 Event 记录的 serie_id 字段始终设置为 627975337。
我读到here,您可以为您的固定装置指定加载顺序;但是添加行
ENV["FIXTURES"] ||= "series,events"
到我的 environment.rb 文件没有工作,也没有运行
rake db:fixtures:load FIXTURES=series,events
有什么想法吗?
【问题讨论】:
标签: ruby-on-rails ruby sqlite ruby-on-rails-4 fixtures