我有几个范围的方法。当我在控制台中调用它们时,我得到了预期的结果。当我查看它们时,范围不适用。无论过滤范围方法如何,我都会看到“全部”。有什么想法吗?
编辑 - 我正在使用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
答案 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调用中删除了该范围选项并且它有效。
谢谢大家。