在我的应用程序中,我有2个这样的类:
class City < ActiveRecord::Base
has_many :events
end
class Event < ActiveRecord::Base
belongs_to :city
attr_accessible :title, :city_id
end
如果我创建城市对象:
city = City.create!(:name => 'My city')
然后传递参数来创建这样的事件:
event = Event.create!(:name => 'Some event', :city => city)
我得到了
event.city_id => null
所以问题是 - 是否可以通过这样的方式传递参数来连接我的对象,我做错了什么?或者我应该使用其他方式(如
event.city = city
) ?
答案 0 :(得分:4)
通常情况下,如果attr_accessor
排除attr_protected
或:city
包含Event
属性:city_id
,则会发生这种情况。允许:city
可访问不会自动允许{{1}}。
(注意:根据上述评论中的讨论,以及社区维基,提供了这个答案。)
答案 1 :(得分:1)
这将有效:
city = City.create!(:name => "London")
event = Event.create!(:name => "Big Event")
event.city = city
event.save
或者,如果Event.validates_presence_of :city
Event.create!
调用失败而City
没有event = Event.new(:name => 'Big Event').tap do |e|
e.city = city
e.save!
end
,则可以执行此操作:
{{1}}
答案 2 :(得分:0)
你应该这样做
event = Event.create!(:name => 'Some event', :city_id => city.id)