【发布时间】:2016-03-16 01:22:05
【问题描述】:
这就是我做关联的方式:
class Event < ApplicationRecord
has_one :lineup
has_many :artists, :through => :lineup
belongs_to :venue
end
和
class Lineup < ApplicationRecord
belongs_to :artist
belongs_to :event
end
这就是我尝试播种的方式
Event.create!(name: "The Function",
date: DateTime.new(2016,2,3,10,0,0,'+7'),
venue: Venue.create!(name: "Speakeasy", address: "Lynwood Ave", zip_code: "30312"),
lineup: Lineup.create!(:artist => Artist.create!(name: "DJ Sliink", bio: "jersey club king")),
description: "free free free")
我得到的错误是ActiveRecord::RecordInvalid: Validation failed: Event must exist,它指向lineup 行。如果我设置lineup: nil,我会收到相同的消息,然后在创建Event 后,尝试执行event1.lineup = Lineup.create!...。我有什么选择可以摆脱 Lineup 对现有 Event 的依赖?据我了解,问题出在belongs_to 关系上,因为如果我从 Lineup 实例创建中取出artist:,我也会得到Artist must exist 错误。
验证:
> Event.validators
=> [#<ActiveRecord::Validations::PresenceValidator:0x007fcaab69fa78 @attributes=[:venue], @options={:message=>:required}>]
> Lineup.validators
=> [#<ActiveRecord::Validations::PresenceValidator:0x007fcaad988238 @attributes=[:artist], @options={:message=>:required}>, #<ActiveRecord::Validations::PresenceValidator:0x007fcaab77c7c0 @attributes=[:event], @options={:message=>:required}>]
如果没有种子文件中的!s,我会得到一个完全不同的错误-ActiveRecord::AssociationTypeMismatch: Venue(#70094220768860) expected, got Fixnum(#70094214808600),尽管仍然是event = Event.create 行。
【问题讨论】:
-
请在您的帖子中添加验证。
-
我没有写任何验证。它们是自动生成的吗?
标签: ruby-on-rails associations belongs-to