Call a model method in a Controller

sidney picture sidney · Jun 21, 2012 · Viewed 65.7k times · Source

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.

Answer

ben picture ben · Jun 21, 2012

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...