因此我们在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的行为的改变。
答案 0 :(得分:0)
尝试使用include而不是连接,它会更好更快。
User.include(:memberships).first