Ruby on rails 如果我在RoR中有一个API方法和一个同名的控件/视图方法呢?

Ruby on rails 如果我在RoR中有一个API方法和一个同名的控件/视图方法呢?,ruby-on-rails,api,Ruby On Rails,Api,假设我想通过转到/product/list查看网站上的产品列表。伟大的因此,它使用我的“列表”视图并输出一些HTML,我的web浏览器将呈现这些HTML 但是现在假设我想向我的客户机提供一个RESTAPI,在那里他们可以获得他们的产品列表。所以我想我会让他们通过oAuth进行身份验证,然后他们会调用/product/list,这将返回他们产品的JSON数组 但正如我前面所说,/product/list显示一个HTML网页。所以,我有一个冲突 在Rails中提供API的通常做法是什么?我应该在/a

假设我想通过转到/product/list查看网站上的产品列表。伟大的因此,它使用我的“列表”视图并输出一些HTML,我的web浏览器将呈现这些HTML

但是现在假设我想向我的客户机提供一个RESTAPI,在那里他们可以获得他们的产品列表。所以我想我会让他们通过oAuth进行身份验证,然后他们会调用/product/list,这将返回他们产品的JSON数组

但正如我前面所说,/product/list显示一个HTML网页。所以,我有一个冲突

在Rails中提供API的通常做法是什么?我应该在/app/controller中有一个子目录“api”和另一个“产品”控制器吗?所以我的客户会去/api/product/list获取他们的产品列表


我对RoR有点陌生,所以我还没有对REST功能有最好的了解,但希望我的问题有意义。

使用respond\u do实际上很简单:


然后,他们可以直接进入products/list/index.json并准备就绪。

使用respond\u do实际上非常简单:


然后,他们可以直接转到products/list/index.json,就可以了。

通常的做法是使用respond\u to方法。您可以使用一个控制器来呈现HTML网页、JSON或XML响应

class StatesController < ApplicationController
  def index
    @states = State.get_states_by_country(params[:country_id])

    respond_to do |format|
        format.html
        format.json { render :json => { :prompt => t('address.select_state'),
                                        :states => @states.to_json(:only => [:id], :methods => [:name]) }}
        format.js
    end
  end
end
class StatesController{:prompt=>t('address.select_state'),
:states=>@states.to_json(:only=>[:id],:methods=>[:name])}
format.js
结束
结束
结束

通常的做法是使用响应方法。您可以使用一个控制器来呈现HTML网页、JSON或XML响应

class StatesController < ApplicationController
  def index
    @states = State.get_states_by_country(params[:country_id])

    respond_to do |format|
        format.html
        format.json { render :json => { :prompt => t('address.select_state'),
                                        :states => @states.to_json(:only => [:id], :methods => [:name]) }}
        format.js
    end
  end
end
class StatesController{:prompt=>t('address.select_state'),
:states=>@states.to_json(:only=>[:id],:methods=>[:name])}
format.js
结束
结束
结束

生病了。只是生病了。我使用的是ExtJS,我发现我可以做到这一点--Ext.Ajax.defaultHeaders={'Accept':'application/json'};--然后,只要我的“responses_to”块中有format.json,Rails就知道对“/product/list”的请求应该返回json数据——我不必请求“/product/list.json”。太棒了,病了。只是生病了。我使用的是ExtJS,我发现我可以做到这一点--Ext.Ajax.defaultHeaders={'Accept':'application/json'};--然后,只要我的“responses_to”块中有format.json,Rails就知道对“/product/list”的请求应该返回json数据——我不必请求“/product/list.json”。太棒了。