我需要从另一个控制器调用方法。什么是最好的方法?例如:
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
答案 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)