我在这里有一定的困难,我无法成功地调用它属于一种方法ProjectPage
模型 ProjectPage
控制器 。
我有我的ProjectPage
控制器:
def index
@searches = Project.published.financed
@project_pages = form_search(params)
end
在我ProjectPage
模型 :
def form_search(searches)
searches = searches.where('amount > ?', params[:price_min]) if check_params(params[:price_min])
@project_pages = ProjectPage.where(:project_id => searches.pluck(:'projects.id'))
end
然而,我无法成功调用form_search
方法 。
要完成davidb的答案,你做错了两两件事是:
1)你调用来自控制器的模型的功能,当模型函数模型本身只被定义。 所以,你确实需要调用
Project.form_search
并定义与该功能
def self.form_search
2)你调用从模型PARAMS。 在MVC架构中,模型不知道有关要求任何东西,所以params为没有定义。 相反,你需要的变量传递给你的函数像你已经做...
三两件事:
1)当你想创建一个类宽方法多数民众赞成不限于类的一个对象,你需要定义它像
def self.method_name
..
end
并不是
def method_name
...
end
2)这可以使用来完成scope
与lambda
这些都是非常好的功能。 像这样的模型添加:
scope :form_search, lambda{|q| where("amount > ?", q) }
将使你打电话
Project.form_search(params[:price_min])
该谢胜利的步骤将是一个范围添加到ProjectPage
模式,使一切都在这个地方它属于!
3)当你调用你需要specifiy这样的模型中控制器类方法:
Class.class_method
声明这样的模型
def self.form_search(searches)
searches = searches.where('amount > ?', params[:price_min]) if check_params(params[:price_min])
@project_pages = ProjectPage.where(:project_id => searches.pluck(:'projects.id'))
end
从控制器调用
@project_pages = ProjectPage.form_search(params)