【问题标题】:Rails 4 - Chained Scopes Work in the Console But Not on ViewRails 4 - 链式作用域在控制台中工作但不在视图中
【发布时间】:2014-05-23 01:23:25
【问题描述】:

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

EDIT - 我使用 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

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    好吧,事实证明是另一个作用域方法导致了这个问题:

    scope :sorted, order("invoice_date DESC")
    

    我从 Ransack 调用中删除了该范围选项,它起作用了。

    谢谢大家。

    【讨论】:

      【解决方案2】:

      我不确定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) 干净得多。对我来说似乎很声明。你不喜欢表达的什么?

      【讨论】:

      • binding.pry 在我的计算机上安装非常痛苦(实际上是它的依赖gem),我认为在这种情况下安装gem 太过分了。正如您在答案的第二部分中建议的那样,Invoice.this_year.open.search(params[:q]).to_sql 应该足以调试这种情况
      • 嗯,很抱歉听到您遇到安装问题。它对我来说毫无问题。我大体上同意你的观点,但在这种情况下我会去撬动,因为代码看起来很合理,而且我感觉 search 正在做一些意想不到的事情。换句话说,可能需要进行一些扩展调试。
      • 我正在使用 Ransack,因此使用了 @search - 我尝试在不使用 @search 的情况下加载:@invoices = Invoice.this_year.sorted.paginate(:page => params[:page], :per_page => 25) 但得到相同的结果
      • 跟随这个问题stackoverflow.com/questions/8805426/…看来你的代码应该可以工作@KatieM(我用谷歌搜索了“Ransack scope”)
      猜你喜欢
      • 2012-11-27
      • 2015-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-20
      • 1970-01-01
      • 2015-04-09
      相关资源
      最近更新 更多