ruby-on-rails - rails 5 : ActiveRecord collection index_by

标签 ruby-on-rails activerecord

使用索引方法将应用程序升级到 Rails 5。问题是它不会递增到下一个 ActiveRecord 集合记录。下面的代码用于在 Rails 4.0 中工作。尝试使用index_by。

def next_question
  index = campaign.quiz_questions.index self
  campaign.quiz_questions[index + 1]
end

调试器

(byebug) campaign.quiz_questions.index
*** NoMethodError Exception: undefined method `index' for #<QuizQuestion::ActiveRecord_Associations_CollectionProxy:0x007f80012d71b0>
Did you mean?  index_by

使用index_by

(byebug) index = campaign.quiz_questions.index_by
#<Enumerator: #<ActiveRecord::Associations::CollectionProxy [#<QuizQuestion id: 113, campaign_id: 492, message: "Where did Hullabalooza's freak show manager send H...", created_at: "2016-07-20 20:50:32", updated_at: "2016-07-20 20:50:32">]>:index_by>

索引 + 1

(byebug) index + 1
*** NoMethodError Exception: undefined method `+' for #<Enumerator:0x007fc4db445960>

nil

最佳答案

将其更改为find_index方法。现在可以运行了

def next_question
  index = campaign.quiz_questions.find_index self
  campaign.quiz_questions[index + 1]
end

关于ruby-on-rails - rails 5 : ActiveRecord collection index_by,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38490650/

相关文章:

ruby-on-rails - 带有 Rails 5.1 form_with 的嵌套资源

mysql - Rails 快速查找 has_many 关联与关联 ID 数组完全匹配的记录

ruby-on-rails - Rails 模型中的条件回调?

mysql - 请解释一下CodeIgniter ActiveRecord set() update()

mysql - Latin1 数据库中的 UTF-8 数据 : can it be saved?

ruby-on-rails - 在使用 Webrat 进行测试时如何捕获到其他域的重定向?

ruby-on-rails - 为 rails 设置 sendgrid..returning 授权错误

ruby-on-rails - Rails 3 和 ActiveAdmin。过滤器显示对象而不是公司名称

ruby-on-rails - after_initialize和after_find回调顺序在Active Record对象生命周期中?

ruby-on-rails - 比较 rspec 自定义 ActiveRecord::RecordInvalid 错误消息