0

この特定の状況で厄介な問題があります。

#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」のようになるはずですが、それを正しい変数に変更するにはどうすればよいですか?

私は宝石「レール」、「3.2.12」を使用しています

ありがとう

4

1 に答える 1

0

respond_toこれを機能させるには、呼び出しで名前空間を指定する必要があります。

class Api::AlbumsController < ApplicationController
  respond_to :json

  def create
    respond_with :api, Album.create(params[:album])
  end
end
于 2013-03-24T20:04:55.850 に答える