2016-04-14 14 views
-2

に失敗したユーザーはアップデート後の私のjavascriptた:私のルートでRubyは以下の

$('.attachments-container').on('click', '.cover-attachment', function(event) { 
       var attachment_id = $(this).parent().find('input[name="product_attachment[id][]"]').val(); 
       $.ajax({ 
        type: "POST", 
        url: "/products/update_cover", 
        dataType: "json", 
        data: attachment_id, 
        complete: function(){ 
         console.log('change completed'); 
        } 
       }); 
       event.preventDefault(); 

      }) 

:私のコントローラで

resources :products do 
     member do 
      match "update_cover", via: [:post] 
      post "update_cover" => 'products#update_cover' 

     end 
    end 

を:

class ProductsController < ApplicationController 
skip_before_action :authenticate_user!, only: [:result, :show] 
def update_cover 
     @attachment_id = params[:attachment_id] 
     render :json => {:status => 'success'}.to_json 
    end 
end 

私が持っていましたこのエラーがどこから来るのかわからない:ActionController::RoutingError (No route matches [POST] "/products/update_cover"):ありがとう!!

答えて

0

端末でrakeルートを実行すると、products/update_coverのルートがないことがわかります。あなたはproducts /:id/update_coverを持っています。メンバールートとして定義したので、ルートの一部としてparent_idを渡す必要があります。この

url: "/products/" + attachment_id + "update_cover", 

を試してみて、あなたは、データのハッシュにattachment_id渡す必要がいけません。

あなたが投稿した2つのルートは基本的に同じことをします。あなたは失うことがあります

match "update_cover", via: [:post] 
+0

IDを含めるのではなく、どのように '/ products/update_cover'として渡すことができますか? – d3bug3r

+0

ルートを変更するには、製品のネストを解除してproduct_update_coverという名前を付ける必要があります。それはちょうど "product_update_cover" => "products#update_cover"の投稿になります。そして、IDをデータハッシュに渡します。私はこのオプションをお勧めしたいとは思っていません。それは大暴落の大会です。ルートを設定してレイクルートを実行して結果を表示すると、それらをどのように構造化するかがわかります。 – margo