我试图找出如何做这样的事情:添加到收藏之前保存
event = Event.new
loc = Location.new
loc.name = "test"
loc.save
event.locations << loc
event.save!
凡事件和地点有一个多对多的关系。不过,我不断收到此错误:
ActiveRecord::RecordInvalid: Validation failed: Event locations is invalid
,如果我先救事件,但我没有在上下文选项,我在我的工作
这里是我的模型也能正常工作。
class Event < ActiveRecord::Base
#belongs_to :user
has_many :event_locations
has_many :locations, :through => :event_locations
accepts_nested_attributes_for :locations
end
class EventLocation < ActiveRecord::Base
belongs_to :event
belongs_to :location
validates_presence_of :event
validates_presence_of :location
accepts_nested_attributes_for :location
end
class Location < ActiveRecord::Base
has_many :event_locations
has_many :events, :through => :event_locations
end
现在我发现连接模型EventLocation上的验证会导致此问题。
我不应该验证这一点吗?有没有不同的方式呢?
调用'event.locations << loc'会隐式调用'loc'上的'save',所以你不需要事先自己做。但是你可以粘贴你的模型,因为我们需要这些信息来回答你的问题。你有验证失败,但没有看到你的验证,我们不能完全回答 – cpjolicoeur
完成。检查出来 – Rob
想通了!感谢你的想法:)。但是,由于validates_presence_of:事件 validates_presence_of:event_locations中的位置。我不需要这些验证吗? – Rob