2010-06-29 56 views
1

我最近遇到了一个记录被标记为只读的问题。检查出我发现这个文档:“装通过与背驮式连接的属性为只读,因为它们不能被保存将被标记记录”为什么不能保存捎带属性的记录?

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

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

我找不到为什么使用此命名范围装载的模型无法保存。有任何想法吗?

+1

该解决方案属于下面的答案,旁边有一个绿色复选标记。 – 2010-06-29 07:55:24

+0

谢谢Ignacio指出这一点。 – 2010-06-29 08:04:22

回答

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

当你使用:加入,ActiveRecord的模型是相关联的对象不是实例。你应该使用:include来代替。

+0

谢谢您的回答,但我将其用作纯粹的选择范围,否则通常不需要关联类。在那些情况下,尽管如此,出于效率原因,使用解决方案可能会更好。 – 2010-06-30 06:02:30

相关问题