ruby-on-rails - Rails 更新 4.1.0 后,next 方法 (Class.first) 不起作用

标签 ruby-on-rails ruby ruby-on-rails-4 where-clause argument-error

我有一个如下所示的模型:

class Question < ActiveRecord::Base
  belongs_to :level

    def next
        Question.first(:conditions => ['id > ? AND level_id = ?', self.id, self.level_id], :order => 'id ASC') 
    end

end

这工作得很好,直到我通过 Rails 更新到版本 4.1.0。 现在我收到此错误:

ArgumentError in QuestionsController#answer invalid value for Integer(): "{:conditions=>[\"id > ? AND level_id = ?\""

我不知道如何解决这个问题。 Rails 更新可能是造成此问题的原因吗?我在另一个应用程序中使用了完全相同的方法,并且该方法仍然有效。

最佳答案

方法 first 在 Rails 4 中发生了变化。

在 Rails 3.2 之前,它将接受条件参数,并且您的实现可以正常工作。这是original documentation ,请注意它在使用 *args 之前如何检查它们的类型。

在 Rails 4 中,方法发生了变化 ( docs ),现在它只接受整数限制。

您应该使用以下内容更新您的实现:

def next
  Question.where('id > ? AND level_id = ?', id, level_id).order(id: :asc).first 
end

关于ruby-on-rails - Rails 更新 4.1.0 后,next 方法 (Class.first) 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23391885/

相关文章:

ruby-on-rails - 如果传入查询,如何编写规范来测试搜索是否有效?

ruby - 如何在 ruby​​ 中编写负循环,如 for(i=index; i >= 0; i --)

javascript - 如何在Rails应用程序 View 中自动更新表的数据而不刷新页面?

ruby-on-rails-4 - Rails 4-本地 Assets 预编译错误

ruby-on-rails - 表单参数未正确散列

ruby-on-rails - 为返回 XML 的 Controller 操作编写规范 -- Ruby on Rails

ruby-on-rails - 分页问题 (will_paginate)

ruby - 我可以在 Ruby 中出现异常时访问绑定(bind)吗

Ruby 如果接下来做很多事情,最优雅的方法是什么

ruby-on-rails-4 - rails 使用 anchor 渲染 Action