【问题标题】:Getting activerecord readonly error when adding a where clause添加 where 子句时出现 activerecord 只读错误
【发布时间】:2017-06-05 16:37:51
【问题描述】:

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

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 关系并显示每个实例的编辑表单。

【问题讨论】:

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


    【解决方案1】:

    current_teams 可能正在做一些join,在某些情况下会导致记录变为只读。你可以解决这个问题

    a = all_teams.first.term_enrollments.first.readonly(false)
    a.update_attributes(term: Term.find(2))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-22
      • 1970-01-01
      • 2018-10-11
      相关资源
      最近更新 更多