Call a model method in a Controller

前端 未结 3 1295
一向
一向 2021-01-31 02:34

I\'m have some difficulties here, I am unable to successfully call a method which belongs to a ProjectPage model in the ProjectPage contro

相关标签:
3条回答
  • 2021-01-31 03:09

    Three thing:

    1.) When you want to create a class wide method thats not limited to an object of the class you need to define it like

    def self.method_name
      ..
    end
    

    and not

    def method_name
      ...
    end
    

    2.) This can be done using a scope with lambda these are really nice features. Like This in the model add:

    scope :form_search, lambda{|q| where("amount > ?", q) }
    

    Will enable you to call

    Project.form_search(params[:price_min])
    

    The secound step would be to add a scope to the ProjectPage model so everything is at the place it belongs to!

    3.) When you call a Class method in the Controller you need to specifiy the Model like this:

    Class.class_method
    
    0 讨论(0)
  • 2021-01-31 03:21

    Declare like this in model

    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
    

    and call from controller

    @project_pages = ProjectPage.form_search(params)
    
    0 讨论(0)
  • 2021-01-31 03:30

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

    0 讨论(0)
提交回复
热议问题