Rails 4 - 链接范围在控制台中工作但不在视图上工作

时间:2014-04-09 17:08:48

标签: ruby-on-rails

我有几个范围的方法。当我在控制台中调用它们时,我得到了预期的结果。当我查看它们时,范围不适用。无论过滤范围方法如何,我都会看到“全部”。有什么想法吗?

编辑 - 我正在使用Ransack过滤结果,因此@search

另外,你们知道一种更简洁的方法来将日期时间与1.year.ago进行比较吗?我下面的内容在控制台中有效,但我确信有更好的比较方法。

提前致谢。

invoice.rb

  def self.open
    where(closed: false)
  end

  def self.this_year
    current_year = 1.year.ago
    where("invoice_date >= ?", current_year)
  end

invoices_controller:

  def index
    @search = Invoice.this_year.open.search(params[:q])
    @invoices = @search.result.paginate(:page => params[:page], :per_page => 25)
    @count = @invoices.count
    render 'shared/invoices.html.erb'
  end

2 个答案:

答案 0 :(得分:0)

我不确定search的来源,但是它可能会删除现有的范围?

确定问题的最简单方法可能是使用pry深入了解控制器方法。在您的Gemfile中:

gem "pry"

然后运行bundle install

在控制器中

def index
  binding.pry
  # ...
end

尝试重新加载发票页面,您会看到请求挂起。转到您的服务器日志,您应该看到类似控制台的提示。

这样您就可以运行Invoice.this_year.open.to_sql,然后Invoice.this_year.open.search(params[:q]).to_sql来查看范围更改的方式。

另外,我不确定它比where("invoice_date >= ?", 1.year.ago)更清洁。对我来说似乎很有说服力。你不喜欢这个表达方式吗?

答案 1 :(得分:0)

嗯,事实证明另一种范围方法导致了这个问题:

scope :sorted, order("invoice_date DESC")

我从Ransack调用中删除了该范围选项并且它有效。

谢谢大家。