2013-03-24 7 views
0

меня раздражает вопрос с этой конкретной ситуации:Routing ошибка response_with с именем модели

#Controller> api/albums_controller.rb 
class Api::AlbumsController < ApplicationController 
    respond_to :json 

    def create 
    respond_with Album.create(params[:album]) 
    end 
end 

Как вы можете видеть, этот контроллер находится под именем папки «апи». Этот контроллер подключается к «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», но как я могу изменить это на правильное переменная?

Я использую камень 'рельсы', '3.2.12'

Благодарности

ответ

0

следует указать пространство имен в respond_to вызова, чтобы сделать эту работу:

class Api::AlbumsController < ApplicationController 
    respond_to :json 

    def create 
    respond_with :api, Album.create(params[:album]) 
    end 
end