0

私は2つのモデルを持っていpostますproduct

これは私のポストコントローラーです

before_action :seo_url,only: [:show]
def product_list
    if params[:product_id] == 1
      @products = Product.All
    end
    respond_to do |format|
      format.json { render json: @products.id }
    end
  end

private
def seo_url
    @post = Post.friendly.find params[:id]
  end

これが私のajax呼び出しです

$.ajax({
    type: "GET",
    url: '/posts/product_list.json',
    data: {product_id: 1},
    dataType: 'json'
});

私のコンソールはこのようなものを投げます。何が起こっているのか理解できません

Parameters: {"product_id"=>"1", "_"=>"1380659219433", "id"=>"product_list"}
  Post Load (0.9ms)  SELECT "posts".* FROM "posts" WHERE "posts"."slug" = 'product_list' ORDER BY "posts"."id" ASC LIMIT 1
Completed 404 Not Found in 5ms

ActiveRecord::RecordNotFound (ActiveRecord::RecordNotFound):
  app/controllers/posts_controller.rb:85:in `seo_url'

編集-1

Processing by PostsController#product_list as JSON
  Parameters: {"product_id"=>"1"}
Completed 500 Internal Server Error in 3ms

NoMethodError (undefined method `id' for nil:NilClass):
4

2 に答える 2

1

/posts/product_list「メソッドを呼び出す」ではなく、「product_list」showを使用してコントローラーのメソッドを呼び出すと解釈されています。idproduct_list

これはあなたのconfig/routes.rbファイルが原因です。あなたのproduct_list方法についてそれを伝える必要があります。このようなもの:

resources :posts do
  get "product_list", on: :collection
end
于 2013-10-01T20:39:51.790 に答える
0

コードにいくつかの非標準の概念があります。

あなたの質問に対する簡単な答えは、ID = "product_list" の投稿が見つからないということです。主キーをIDから変更したと思いますか?

ActiveRecord のドキュメントを確認してください - http://guides.rubyonrails.org/active_record_querying.html#retrifying-a-single-object

長い回答には、RESTful get ルートの ID が「product_list」である理由を尋ねることが含まれます。http://guides.rubyonrails.org/routing.htmlに再度アクセスして、続行する前にルートを再確認します。

于 2013-10-01T20:49:14.300 に答える