添加where子句时,获取activerecord readonly错误

时间:2017-06-05 16:37:52

标签: ruby-on-rails activerecord rails-activerecord ruby-on-rails-5

我对两个不同的页面有两个查询:

all_teams = Team.includes(:terms, :labs, people: [:schools], term_enrollments: [:lab])
current_teams = Team.includes(:terms, :labs, people: [:schools], term_enrollments: [:lab]).where(terms: {id: 3)

我正在尝试使用每个查询更新term_enrollments。对于第一个查询,一切都很好。我使用第一个查询执行此操作:

a = all_teams.first.term_enrollments.first
a.update_attributes term: Term.find(2)
=> true

当我尝试使用第二个查询执行此操作时,它不起作用。这是我尝试为第二个查询执行的代码:

a = current_teams.first.term_enrollments.first
a.update_attributes term: Term.find(2)

但不是工作,而是说:

ActiveRecord::ReadOnlyRecord: TermEnrollment is marked as readonly

这两个查询都在控制器操作中,并提供循环遍历activerecord关系的页面,并显示每个实例的编辑表单。

1 个答案:

答案 0 :(得分:1)

current_teams可能会执行一些join,这在某些情况下会导致记录变为只读。你可以用

解决这个问题
a = all_teams.first.term_enrollments.first.readonly(false)
a.update_attributes(term: Term.find(2))