Rails 3: Как отключить автосохранение ассоциаций has_one и has_many? - PullRequest
4 голосов
/ 09 декабря 2010

У меня есть пользовательская модель с одним изображением.Как я могу отключить функцию автосохранения.когда я попробовал следующее я получаю ошибку.Я использую рельсы 3.

class User < ActiveRecord::Base  
  has_one :image_mapping, :class_name=>"ImageMapping",:as => :imageable  
  has_one :image, :through => :image_mapping, :class_name => "Image", :autosave => false  
end  

В нем указано Неизвестный ключ (ы): автосохранение
не загружается autosave_association.rb правильно?

Ответы [ 2 ]

2 голосов
/ 21 декабря 2010

Возможно, это не решит вашу проблему, но, возможно, вы все равно найдете это полезным:

Кажется, проблема с has_one :through. Например, в class Post,

has_one :owner, :through => :blog

отлично работает, но

has_one :owner, :through => :blog, :autosave => false

нет. Если вы создаете экземпляр Post, например

post = Post.find 1

Вы получите это:

ArgumentError: Unknown key(s): autosave
    from /var/lib/gems/1.9.1/gems/activesupport-3.0.1/lib/active_support/core_ext/hash/keys.rb:43:in `assert_valid_keys'
    from /var/lib/gems/1.9.1/gems/activerecord-3.0.1/lib/active_record/associations.rb:1758:in `create_has_one_through_reflection'
    from /var/lib/gems/1.9.1/gems/activerecord-3.0.1/lib/active_record/associations.rb:1102:in `has_one'
    from /var/lib/gems/1.9.1/gems/activerecord-3.0.1/lib/active_record/autosave_association.rb:137:in `has_one'
[...] 

Глядя на документацию , я не могу найти причину, почему она не должна работать. И на самом деле, кажется, что он отлично работает с has_many, только has_one икоты, если установлена ​​опция :autosave.

Если кто-то, находящийся здесь, в Stack Overflow, не обнаружит, что что-то не так с использованием :has_one, вы также можете обратиться за помощью к списку рассылки Rails ; Я думаю, что Rails-core является правильным решением этой проблемы.

0 голосов
/ 12 апреля 2013

Если вы хотите присвоить объект ассоциации has_one без его сохранения, используйте метод build_association.Заменяемый объект все равно будет сохранен для обновления его внешнего ключа.

Пример

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