我试图从客户端进行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的所有请求。
答案 0 :(得分:1)
由于您未使用#show操作,因此可以使用only
或except
参数。这样的事情应该有效:
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