如何将相同的请求解释为Rails中的JSON和* / *?

时间:2014-02-13 13:02:36

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

注意:问题的要点在下面的第一次更新中

我正在维护一个rails项目,我注意到如果我执行GET "/request/past_list"我已经路由到RequestController#show

routes.rb我得到了:

get '/request/past_list', to: 'request#past_list'
get '/request/:id', to: 'request#show'

并且运行rake routes我得到(可预测):

request_past_list GET     /request/past_list(.:format)     request#past_list
                  GET     /request/:id(.:format)           request#show

所以我想知道为什么rails认为我的网址中的past_list字符串实际上是:id

目前这是我实施的解决方法:

def show
  if ((params[:id]).is_a? String and (params[:id].eql? "past_list"))
    past_list  
  else
    ..

但是因为它我已经在晚上睡觉时遇到了麻烦..我希望知道我的良心是怎么回事

P.S。这就是chrome dev工具上的网络请求,以防万一有些细节可能引发红旗:

enter image description here

更新:我注意到在当前代码中解释请求的方式有所不同:

Started GET "/request/past_list" for 127.0.0.1 at 2014-02-13 15:41:14 +0200
Processing by RequestController#show as JSON

和我从git历史中挖出的旧工作:

Started GET "/request/past_list" for 127.0.0.1 at 2014-02-13 15:43:40 +0200
Processing by RequestController#past_list as */*

事情是旧的工作代码具有完全相同的routes.rb文件..没有更改!

所以我认为将请求解释为JSON*/*之间存在差异。

第二次更新 以下是与此*/*业务相关的两个问题: When do Rails controllers render as JS, HTML, or 'q'?Rails 3 Processing by */*

1 个答案:

答案 0 :(得分:0)

事实证明我在routes.rb文件中有这个:

get '/request/:id', to: 'request#show', :defaults => {:format => :json}

所以我简单地删除了它。

为了让你们从这次讨论中脱颖而出..诀窍是this git命令:

$ git diff $things_were_working_commit..$things_weren't_working_commit -- routes.rb
之后就显而易见了!