Передача параметров ассоциации при создании объекта ActiveRecord - PullRequest
3 голосов
/ 21 июня 2010

В моем приложении у меня есть 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 ]

4 голосов
/ 21 июня 2010

Обычно это происходит, когда у вас есть attr_accessor, который исключает, или attr_protected, который включает атрибут :city в Event.Разрешение :city_id быть доступным означает, что не автоматически разрешает :city быть таким.

(NB: этот ответ предоставлен согласно обсуждению в комментариях выше, и, таким образом, сообществу вики.)

1 голос
/ 21 июня 2010

Это будет работать:

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
0 голосов
/ 21 июня 2010

Вы должны делать

event = Event.create!(:name => 'Some event', :city_id => city.id)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...