Call a model method in a Controller

controller, instantiation, methods, model, ruby-on-rails

Solution

To complete davidb's answer, two things you're doing wrong are:

1) you're calling a model's function from a controller, when the model function is only defined in the model itself. So you do need to call

Project.form_search

and define the function with

def self.form_search

2) you're calling params from the model. In the MVC architecture, the model doesn't know anything about the request, so params is not defined there. Instead, you'll need to pass the variable to your function like you're already doing...

Problem

I'm have some difficulties here, I am unable to successfully call a method which belongs to a `ProjectPage` model in the `ProjectPage` controller. I have in my `ProjectPage` controller: ``` def index @searches = Project.published.financed @project_pages = form_search(params) end ``` And in my `ProjectPage` model: ``` 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 ``` However, I am unable to successfully call the `form_search` method.

Original source