プロバイダのプロバイダからプロバイダを選択し、次に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
です。私はどこから来るのか分からない。助言がありますか?ありがとう。