sid*_*ney 37 methods controller model ruby-on-rails instantiation
我在这里有一定的困难,我无法成功地调用它属于一种方法ProjectPage
模型的ProjectPage
控制器.
我在我的ProjectPage
控制器中:
def index
@searches = Project.published.financed
@project_pages = form_search(params)
end
Run Code Online (Sandbox Code Playgroud)
在我的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
Run Code Online (Sandbox Code Playgroud)
但是,我无法成功调用该form_search
方法.
ben*_*ben 63
要完成davidb的答案,你做错的两件事是:
1)当模型函数仅在模型本身中定义时,您从控制器调用模型的函数.所以你需要打电话
Project.form_search
Run Code Online (Sandbox Code Playgroud)
并使用.定义函数
def self.form_search
Run Code Online (Sandbox Code Playgroud)
2)你从模型中调用params.在MVC架构中,模型对请求一无所知,因此没有定义params.相反,你需要将变量传递给你的函数,就像你已经在做的那样......
dav*_*idb 19
三件事:
1.)当你想要创建一个不限于类的对象的类宽方法时,你需要定义它
def self.method_name
..
end
Run Code Online (Sandbox Code Playgroud)
并不是
def method_name
...
end
Run Code Online (Sandbox Code Playgroud)
2)这可以使用来完成scope
与lambda
这些真的很不错的功能.喜欢这个在模型中添加:
scope :form_search, lambda{|q| where("amount > ?", q) }
Run Code Online (Sandbox Code Playgroud)
会让你打电话
Project.form_search(params[:price_min])
Run Code Online (Sandbox Code Playgroud)
第二步是将ProjectPage
模型添加到模型中,以便一切都在它所属的位置!
3.)当您在Controller中调用Class方法时,您需要指定模型,如下所示:
Class.class_method
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
61133 次 |
最近记录: |