Ruby on Rails:用'加入'选择的任何东西只读

时间:2017-05-31 09:43:35

标签: ruby-on-rails-3 activerecord

因此我们在activerecord类中使用readonly?方法遇到了一些困难。似乎通过调用joins获取的任何内容都被设置为只读并抛出此错误

ActiveRecord::ReadOnlyRecord: ActiveRecord::ReadOnlyRecord

例如:

# fine 
User.first.readonly?
User.first.save
# not fine
User.joins(:memberships).first.readonly?
# false
User.joins(:memberships).first.save
# ActiveRecord::ReadOnlyRecord

根据Rails documentation,对于"通过带有背负属性的连接加载的记录,这将被设置为false。"

据我所知,我们不在此处包含任何背驮式属性。

我可以强行规避这种限制,但感觉就像我不必要地黑客攻击系统一样。

user = User.joins(:memberships).first
User.instance_variable_set(:@readonly, false)
user.save

有谁知道为什么联接会返回只读项目?我可以阻止这个吗? (我不想尝试从相关对象中选择任何属性)。

我正在使用Ruby on Rails版本3.2.22.5,看起来这是对早期版本的Rails 3的行为的改变。

1 个答案:

答案 0 :(得分:0)

  

尝试使用include而不是连接,它会更好更快。

User.include(:memberships).first