我有一个运行 Rails 2.3.5 的应用程序,其中大部分都有 JSON API。
一个承包商进来并在应用程序上做了一些工作,并在几个地方使用了 RJS。在主网站上使用 RJS 的控制器操作中的一些也需要成为 API 的一部分。
问题是 JSON API 请求会触发 RJS 响应,这不是我想要的。我希望 RJS 响应从浏览器发生,但是当它是 API 请求(通过使用“application/json”Accept 和 Content-Type 标头来区分)时,我希望它只发送 API 响应。
据我所知,Rails 会触发任何涉及 javascript 的 MIME 类型的 RJS 响应,即
文本/javascript 应用程序/json
等等
有没有办法强制 RJS 只响应文本/javascript?或者有没有更好的方法来解决这个问题?
为了更清楚,我的代码如下所示:
def show
@dashboard = @user.dashboard
respond_to do |wants|
wants.html
wants.json { render :json => @dashboard }
end
end
麻烦的是,这个控制器的视图文件夹中还有一个 show.rjs 模板。当有人点击 API 时,我希望它呈现 json 结果,正如我在上面列出的那样,而是呈现 show.rjs 模板。
如何确保 API 客户端获得我想要的 json 结果,并且仍然让 RJS 模板为网站上的人们呈现?