2017-01-17 12 views
0

プロバイダのプロバイダからプロバイダを選択し、次にajax経由で特定のプロバイダに属するカテゴリのリストを見ることができます。Ajaxはフォーム形式の<select>を呼び出します

controller do 
    def ajax_call 
     @provider = Provider.find(params[:provider]) 
     @categories = @provider.categories 
     respond_to do |format| 
     format.json { render json: @categories } 
     end 
    end 
end 

JS:

$(document).on('ready page:load', function() { 

    $('.select.input.optional').last().addClass('hidden_row'); 

    $('#game_categorization_id').change(function() { 
    var id_value = this.value; 
    $('.hidden_row').removeClass('hidden_row'); 
    $.ajax({ 
     type: 'GET', 
     url: '/admin/games/category_select' 
     // data: id_value 
    }) 
    }); 

}); 

とルート:match '/admin/games/category_select' => 'admin/games#ajax_call', via: :get, as: 'category_select'

私が持っていない私が持っているactiveadminコントローラで

<%= semantic_form_for [:admin, @game], builder: ActiveAdmin::FormBuilder do |f| %> 
    <%= f.semantic_errors :state %> 
    <%= f.inputs do %> 
     <%= f.input :categorization_id, label: 'Provider', as: :select, 
        collection: Provider.all.map { |provider| ["#{provider.name}", provider.id] }, 
        input_html: { class: (:provider_select), 'data-url': category_select_path(provider: 4) } %> 
     <%= f.input :categorization_id, label: 'Category',input_html: { class: ('category_dropdown') }, as: :select, 
        collection: Category.all.map { |category| ["#{category.name}", category.id]}%> 
     ... 

    <% end %> 
    <%= f.actions %> 
<% end %> 

:私はactiveadminでフォームを持っていますアイデア、どのように私はプロバイダからIDをコレクションにURLに渡すことができます。現在、私はそこにcategory_select_path(provider: 4)を持っていますが、実際にはそれはsmthでなければなりません。このように - category_select_path(provider: provider.id)ブラウザでは、Network devtoolsのタブに私のcategory_selectが表示されますが、エラーはCouldn't find Game with 'id'=category_selectです。私はどこから来るのか分からない。助言がありますか?ありがとう。

答えて

0

問題がルートにあった:match '/admin/games/category_select' => 'admin/games#ajax_call', via: :get, as: 'category_select'。これは、Activeadminコントローラのshowアクションによって予約されています。だから私は、私にルートを変更:get '/admin/select_category' => 'admin/games#get_providers_categories', as: 'select_category'、およびajaxコールdata: {provider: provider}に追加ので、私は、プロバイダのIDのparamsで火災ができます

$.ajax({ 
     type: 'GET', 
     url: '/admin/select_category', 
     data: { 
     provider: provider 
     }, 
     success: (function (data) { 
      $('#select_category').children('option').remove(); 
      $('#select_category').prepend('<option value=""></option>'); 
      $.each(data.categories, function() { 
      $('#select_category').append('<option value="' + this.id + '">' + this.name + '</option>') 
      }) 
     }) 
    }) 
関連する問題