Сохранение множественных ассоциаций Ruby on Rails created_to

Есть что-то, чего я не совсем понимаю в концепции Rails belongs_to. В документации указано:

Adding an object to a collection (has_many or has_and_belongs_to_many) automatically saves that object

Допустим, у меня есть сущность Employee:

class Employee < ActiveRecord::Base  
  belongs_to :department
  belongs_to :city    
  belongs_to :pay_grade
end

Будет ли следующий код запускать три обновления, и если да, то есть ли лучший способ сделать это? :

e = Employee.create("John Smith")
Department.find(1) << e
City.find(42) << e
Pay_Grade.find("P-78") << e

person d0bz    schedule 12.09.2012    source источник


Ответы (1)


Вы можете просто назначить его:

e = Employee.new(:name => "John Smith")
e.department = Department.find(1)
e.city = City.find(42)
e.pay_grade = Pay_Grade.where(:name => "P-78")

e.save

Я изменил create на new, чтобы построить объект перед его сохранением. Конструктор принимает хеш, а не разные значения. find принимает только идентификатор, а не строку, вместо этого используйте where в поле.

Вы также можете использовать следующее:

Employee.create(:name => "John Smith", 
                :department => Department.find(1), 
                :city => City.find(42), 
                :pay_grade => PayGrade.where(:name => "P-78").first

Также обратите внимание, что названия моделей должны быть написаны в верблюжьем регистре: PayGrade вместо Pay_Grade.

person Femaref    schedule 12.09.2012
comment
Хорошо, но что произойдет, если я буду использовать форму departement.employees ‹‹ e? Будет ли RoR ждать последней операции collection#‹‹ перед сохранением или будет запускать каждый раз один оператор обновления? - person d0bz; 13.09.2012
comment
<< немедленно записывает в базу данных. - person Femaref; 13.09.2012