ruby-on-rails - 为什么带有piggy-back属性的记录无法保存?

标签 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

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

最佳答案

事实证明,我必须将 :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

关于ruby-on-rails - 为什么带有piggy-back属性的记录无法保存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3138687/

相关文章:

php - 使用 ActiveRecord 和 Yii2 记录实际的 SQL 查询?

ruby-on-rails - Rails ActiveRecord 对象 ID 是否保证单调递增?

ruby-on-rails - activerecord 比较时间

ruby-on-rails - 如何返回基于一天的 future 日期列表(例如,星期一到年底的日期)?

ruby-on-rails - OpsWorks 覆盖 database.yml/忽略自定义 JSON

ruby-on-rails - Rails Eager 加载(包括)和 where 子句不起作用?

ruby-on-rails - RAILS : Does ActiveRecord#persisted? 实际查询数据库?

mysql - Rails 加入最大条件

ruby-on-rails - capybara :未定义的方法 'visit'

ruby-on-rails - 我怎样才能加快这个正则表达式?