ActiveRecord RoR - сохранение только новых связанных объектов - PullRequest
0 голосов
/ 13 октября 2011

Как сохранить (вставить) только связанные объекты без сохранения (обновления) базового объекта?

Например, я просто хочу сохранить телефонные номера, я не хочу сохранять / обновлять объект person.

def create_numbers
  #params =>   person_id => 41, person => {:phone_number => '12343445, 1234566, 234886'}
  @person = params[:person_id]
  nums = params[:person][:phone_numbers].split(',')
  nums.each do |num|
    @person.phone_numbers.build(:number => num)
  end
  @person.save    #here I just want to save the numbers, I don't want to save the person.  It has read only attributes
end

Модель:

Person < ...
  # id, name
  belongs_to :school, :class_name => :facility
  has_many :phone_numbers
end

PhoneNumber < ...
  # id, number
  belongs_to :person   
end

Это немного глупый пример, но он иллюстрирует то, чего я пытаюсь достичь

Ответы [ 2 ]

2 голосов
/ 13 октября 2011

Как насчет @person.phone_numbers.create(:number => num)

Недостатком является то, что вы не будете знать, потерпел ли он неудачу или нет - вы можете справиться с этим, но это зависит от того, как именно вы хотите с ним справиться.

1 голос
/ 13 октября 2011

Самый простой подход - заменить build(:number => num) на create(:number => num), что немедленно создаст и сохранит объект phone_number (при условии, что он прошел проверку).

Если вам нужно сохранить их все после создания всего набора (по какой-то причине), вы можете просто сделать что-то вроде

@person.phone_numbers.each{|num| num.save}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...