【发布时间】:2016-12-01 21:50:04
【问题描述】:
我正在尝试从客户端进行 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.rb
def get_random_ad
@advertisement = Advertisement.find_random_advertisement()
end
模特广告.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 记录器显示“由 AdvertisementsController#show 处理”?它不应该说“由 AdvertisementsController#get_random_ad 处理”吗?也许这是我的一个基本误解,但我认为如果您在 routes.rb 文件中定义了一个新路由,那么它将处理对该 URL 的所有请求。
【问题讨论】:
-
Rails 将
get_random_ad视为参数,因此它加载了 show 动作。由于路由是从上到下读取的,因此 #show 优先。你在使用#show 操作吗? -
不,我的路线中的任何地方都没有定义显示操作。我知道这是为我的资源默认定义的,是否会添加
only关键字覆盖它? -
你打赌!我在主帖上做了一个完整的回答。
标签: ruby-on-rails ruby json ajax