如何调用另一个控制器的方法

时间:2013-02-20 15:15:33

标签: ruby-on-rails ruby-on-rails-3

我需要从另一个控制器调用方法。什么是最好的方法?例如:

catalogues_controller.rb

class Site::CataloguesController < ApplicationController
  respond_to :js, :html

  def index
    produc_list # call method other controller
  end
end

other_controller.rb

class OtherController < ApplicationController

  respond_to :js, :html

  def produc_list
     myObj = Catalagues.find(params[:id])
     render :json => myObj
  end
end

3 个答案:

答案 0 :(得分:10)

您可以实施一个模块,并将其包含在您的控制器中。

我们将此模块称为“产品助手”:

# In your app/helpers
# create a file products_helper.rb
module ProductsHelper

  def products_list(product_id)
    catalague = Catalagues.where(id: product_id).first
    render :json => catalague
  end

end

然后,在控制器中,您需要使用此方法:

class Site::CataloguesController < ApplicationController
  include ProductsHelper

  respond_to :js, :html

  def index
    products_list(your_id) # replace your_id with the corresponding variable
  end
end

答案 1 :(得分:2)

您可以直接在控制器的方法上调用dispatch。传递一个ActionDispatch :: Response实例,它将填充响应。假设在这个例子中有一个json响应:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="counter-button">
  COUNTER
</div>

<div id="counter"></div>

答案 2 :(得分:1)

如果你有RESTful路由(以及访问它们附带的帮助方法),那么你应该只能使用redirect_to重定向到你想要调用的任何动作,

#  something like... controller_name_action_name_url 

#  In your case, in the catalouges/index method
#  Note this also assumes your controller is named 'other'
   redirect_to others_product_list_url(product_id)