2013-10-01 232 views
0

這是我的崗位控制器衝突之間的兩個

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): 
+2

你的'config/routes.rb'是什麼樣的?發佈,我們可以找出爲什麼你會得到「id」=>「product_list」 –

+0

你應該直接使用jQuery的方法'$ .getJSON(url,data)'http://api.jquery.com/jQuery。 getJSON/ – MrYoshiji

回答

1

/posts/product_list被解釋爲「呼叫控制器中的show法的id‘所屬類別’,而不是「致電product_list方法」

這是因爲你的config/routes.rb文件,你需要告訴它你的product_list方法。類似這樣的:

resources :posts do 
    get "product_list", on: :collection 
end 
+0

好吧,這解決了我的問題。再次拋出沒有方法錯誤。檢查我的'編輯1'' – overflow

+0

'Product.All'應該可以是'Product.all','render json:@ products.id'應該可以是'render json:@products' –

0

你的代碼中有一些非標準的概念。

對您的問題的簡單回答是找不到id爲「product_list」的帖子。我假設你已經改變了你的主鍵ID?

退房ActiveRecord的文檔 - http://guides.rubyonrails.org/active_record_querying.html#retrieving-a-single-object

長的答案將涉及問,爲什麼你的RESTful GET路由具有「所屬類別」的ID。我會重新訪問http://guides.rubyonrails.org/routing.html並在繼續之前仔細檢查您的路線。