我收到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)
。
答案 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)
你的方法是一个类方法,你不能用它来形成你的类的实例