我对两个不同的页面有两个查询:
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关系的页面,并显示每个实例的编辑表单。
答案 0 :(得分:1)
current_teams
可能会执行一些join
,这在某些情况下会导致记录变为只读。你可以用
a = all_teams.first.term_enrollments.first.readonly(false)
a.update_attributes(term: Term.find(2))