在ActiveRecord对象创建上传递关联参数

时间:2010-06-21 11:06:09

标签: ruby-on-rails ruby activerecord associations

在我的应用程序中,我有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

) ?

3 个答案:

答案 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)