Ассоциации ActiveRecord автоматически сохраняются при назначении после миграции между версиями Rails. Как это отключить? - PullRequest
8 голосов
/ 21 января 2012

Я пытаюсь перенести свое приложение с Rails 3.0.7 на Rails 3.1.3. У меня есть модель клиента

class Client::Client < ActiveRecord::Base
  has_one :contact_address, :class_name => "Address", :foreign_key => :client_id, :conditions => ["kind = ? and state = ?", 2, 1]    
end

В методе редактирования контроллера я выполняю этот код:

def edit
  @client = params[:type].classify.constantize.find params[:id]
  @client.contact_address = Address.new(:kind => 2) if @client.contact_address.blank?
end

Во второй строке этого кода я получаю сообщение об ошибке:

Failed to save the new associated contact_address.

Так что кажется, что присвоение @ client.contact_address каким-то образом вызвало метод сохранения объекта contact_address ... Я не хочу этого ... Это какое-то новое поведение Rails 3.1.x? Я хочу, чтобы связанные объекты сохранялись только при вызове .save! на родительской модели - это слишком много волшебства для меня. Можно ли где-нибудь отключить это поведение?

1 Ответ

8 голосов
/ 21 января 2012

Я нашел обходной путь для этого.В методе редактирования контроллеров я использовал метод build вместо присваивания:

def edit
  @client = params[:type].classify.constantize.find params[:id]
  @client.build_contact_address(:kind => 2) if @client.contact_address.blank?
end

Но мне все еще интересно где-то прочитать об этом новом поведении (мое прибегание к поиску было неудачным).Может быть, кто-то может предоставить ссылку?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...