Rails5 - 使用Class方法和params排序

时间:2016-08-30 14:33:06

标签: ruby-on-rails ruby rails-activerecord

在Rails中,我希望使用params按照desc的数量来订购一些推文而且我被卡住了..

我在我的模型中写了一个简单的Class方法:

class Twit < ApplicationRecord

def self.most_liked
 order(like: :desc)
end

end

这是我控制器中的方法:

class TwitsController < ApplicationController

 def index
  if params[:filter]
   @twits = Twit.most_liked(params[:filter])
  else
   @twits = Twit.all
  end
 end

end

如果我只使用@twits = Twit.most_liked,它可以正常工作,但当我使用params添加条件时,它会失败。

谢谢!

2 个答案:

答案 0 :(得分:0)

它失败了,因为您定义了没有参数的方法self.most_liked,然后尝试传递参数Twit.most_liked(params [:filter])。

您应该定义方法

def most_liked(some_variable)

或用另一种方法将其链接起来:

Twit.where(params[:filter]).most_liked

答案 1 :(得分:0)

它无法正常工作,因为您尝试使用从未创建过的metod。你创建了

  

def self.most_liked        订单(如:: desc)      端

但后来你打电话给'most_liked(bla-bla)'。

你应该:

  • 为您的方法添加参数:

      

    def self.most_liked(var1)

  • 或创建方法:

      

    def most_liked(var1)   Twit.where(x =&gt; var1).order(like :: desc)   端

  • 或者将此方法的调用更改为: Model.query.method - 所以:

      

    Twit.where(PARAMS [:过滤器])。most_liked