调用私有方法输出未定义的方法错误

时间:2012-11-16 10:05:51

标签: ruby-on-rails ruby

我收到undefined method 'search_type'以下代码。你能告诉我这里我做错了什么吗?可能是调用私有函数的东西,但我找不到问题所在。

class Entry < ActiveRecord::Base
  attr_accessible :content, :rank, :title, :url, :user_id

  def self.search(params)
    t, o = search_type(params[:type]),search_order(params[:order])
    scope = self

    scope = scope.where(t) if t
    scope.order(o).page(params[:page]).per_page(20)
  end

  private

  def search_order(order)
    return 'comments_count DESC' if order == '1'
    return 'points DESC' if order == '2'

    'rank DESC'
  end

  def search_type(type)
    return nil unless type.present?

    "entry_type = #{type}"
  end
end

在控制器中,我只有@entries = Entry.search(params)

3 个答案:

答案 0 :(得分:6)

这与你的方法的私密性无关,而是search是一个类方法的事实,因此当你从它内部调用search_order时,它正在寻找一个名为{的类方法{1}}但您已将search_order定义为实例方法。

制作你的2个辅助方法类方法,你应该没问题。如果你想让它们成为私有类方法,那么

search_order

如果你想知道为什么class << self def search(...) end private def search_type(...) end def search_order(...) end end 可以正常工作,因为我认为@entries类似于@entries.search(...),即范围,你可以在范围内调用类方法。

答案 1 :(得分:1)

search被定义为类方法,因此您应该调用Entry.search(params)而不是@entries.search(params)

答案 2 :(得分:0)

你的方法是一个类方法,你不能用它来形成你的类的实例