Rails 3:如何禁用has_one和has_many关联的自动保存?

时间:2010-12-09 15:55:03

标签: ruby-on-rails ruby ruby-on-rails-3

我有一个有一个用户模型 图片。如何禁用自动保存选项。当我尝试以下我得到一个错误。 我使用的是铁轨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 个答案:

答案 0 :(得分:2)

这可能无法解决您的问题,但也许您认为它有用:

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'
[...] 

the documentation,我找不到它不应该工作的原因。事实上,如果设置了has_many选项,它似乎与has_one一起使用,只有:autosave打嗝。

除非Stack Overflow上有人发现以这种方式使用:has_one有问题,否则你也可以去Rails mailing list寻求帮助;我认为Rails-core是解决这个问题的正确方法。

答案 1 :(得分:0)

如果您希望将对象分配给has_one关联而不保存它,请使用build_association方法。被替换的对象仍将被保存以更新其外键。

  

实施例

user = User.new
user.build_image