我对这种特殊情况有一个恼人的问题:
#Controller> api/albums_controller.rb
class Api::AlbumsController < ApplicationController
respond_to :json
def create
respond_with Album.create(params[:album])
end
end
如您所见,此控制器位于文件夹名称“api”下。该控制器连接到“artists_controller”控制器:
#routes.rb
namespace :api do
resources :artists do
resources :albums
end
end
所以我使用jQuery调用该函数:
$.ajax({
url: '/api/artists/1/albums',
method: 'POST',
dataType: 'json',
data: 'album[year]=2000&album[genre_id]=1&album[name]=FDFSD&album[artist_id]=1'
});
但是当保存操作成功时我收到此错误:
NoMethodError in Api::AlbumsController#create
undefined method `album_url' for #<Api::AlbumsController:0xc0ebdb4>
仅在保存相册的情况下,如果有任何错误,则ajax调用会返回此内容,例如:
$.ajax({
url: '/api/artists/1/albums',
method: 'POST',
dataType: 'json',
data: 'album[year]=2000&album[genre_id]=1'
});
//Results
{"errors":{"name":["can't be blank"],"artist":["can't be blank"]}}
哪个是正确的,但如何避免'album_url'错误?
我假设可能会发生此错误,因为我们将此控制器用作route.rb文件中的资源,因此正确的路径应该类似于“api_artists_album_url”但是如何将其更改为正确的变量?
我正在使用gem'trail','3.2.12'
由于
答案 0 :(得分:0)
您应该在respond_to
调用中指定名称空间以使其工作:
class Api::AlbumsController < ApplicationController
respond_to :json
def create
respond_with :api, Album.create(params[:album])
end
end