我最近遇到了一个记录被标记为只读的问题。查看文档我发现了这个:
“通过带有背驮式属性的连接加载的记录将被标记为只读,因为它们无法保存。”
为什么不呢?我的模型如下所示:
class MailAccount
belongs_to :account, :class_name => "UserAccount"
named_scope :active, :joins => :account,
:conditions => "user_accounts.archived_at IS NULL"
end
我发现无法保存使用此命名范围检索的模型加载的原因。有什么想法吗?
答案 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。