无法在Rails中定义自定义路由 - 所有ajax请求都默认为show route

时间:2016-07-27 18:23:06

标签: ruby-on-rails ruby json ajax

我试图从客户端进行ajax调用,聚合然后从服务器返回一个随机广告。

客户端ajax调用

getRandomPerk: function() { return $.ajax({url: url + "/advertisements/get_random_ad.json", type: "GET",dataType: "json", error: this.handleAPIError}); },

的routes.rb

resources :advertisements do #collection do # get :get_random_ad #end
member do get :get_random_ad end end

controller advert_controller.rb def get_random_ad @advertisement = Advertisement.find_random_advertisement() end

model advertisement.rb

def self.find_random_advertisement
#ids = Advertisement.select("SELECT id FROM advertisements") Advertisement.find(1) end

(这应该是一个随机的,但我已经让它返回一个特定的一个用于调试目的)

服务器日志

[time:0.000] Started GET "/advertisements/get_random_ad.json" for 10.240.0.75 at 2016-07-27 18:04:17 +0000 [time:0.200] Processing by AdvertisementsController#show as JSON [time:0.201] Parameters: {"id"=>"get_random_ad"} [time:0.207] Advertisement Load (0.1ms) SELECT advertisements.* FROM advertisements WHERE advertisements.id = 0 LIMIT 1 [time:0.208] Completed 404 Not Found in 5.9ms [time:0.209] ActiveRecord::RecordNotFound (Couldn't find Advertisement with id=get_random_ad): app/controllers/advertisements_controller.rb:16:in show'

为什么rails logger说"由AdvertisementsController处理#show"?不应该说"由AdvertisementsController处理#get_random_ad"?也许这是我个人的一个根本误解,但我想如果你在routes.rb文件中定义了一个新路由,那么它会处理对该URL的所有请求。

1 个答案:

答案 0 :(得分:1)

由于您未使用#show操作,因此可以使用onlyexcept参数。这样的事情应该有效:

   resources :advertisements, except: [:show] do
     member do
       get :get_random_ad
     end
   end

但是,如果您只使用:get_random_ad,则可以省略资源,而是使用

get :random_ad, to: 'advertisements#get_random_ad', as: :random_ad