为什么不能保存带有背负属性的记录?

时间:2010-06-29 07:27:33

标签: ruby-on-rails activerecord

我最近遇到了一个记录被标记为只读的问题。查看文档我发现了这个:

“通过带有背驮式属性的连接加载的记录将被标记为只读,因为它们无法保存。”

为什么不呢?我的模型如下所示:

class MailAccount
    belongs_to :account, :class_name => "UserAccount"
    named_scope :active, :joins => :account, 
      :conditions => "user_accounts.archived_at IS NULL"
end

我发现无法保存使用此命名范围检索的模型加载的原因。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

事实证明我必须向范围添加:select => "mail_accounts.*",否则查询会在user_accounts对象中存储来自MailAccount的属性,这会阻止它被保存。

所以使用的正确代码是:

class MailAccount
    belongs_to :account, :class_name => "UserAccount"
    named_scope :active, :joins => :account, 
      :conditions => "user_accounts.archived_at IS NULL",
      :select => "mail_accounts.*"
end

答案 1 :(得分:1)

使用:join时,不会实例化该关联对象的ActiveRecord模型。您应该使用:include。