Active Admin -refresh第二次下拉基于第一次下拉选项(Rails 3.2)

时间:2013-11-17 19:07:01

标签: jquery ruby-on-rails ruby-on-rails-3 drop-down-menu activeadmin

我在主动管理员上实施表单时遇到问题,其中第二个下拉列表(子类别)必须调整到其前面的下拉列表中的类别选项。

基本上我想首先为一家公司设立一个行业,然后选择子行业下降。我创建了2个模型:

  • CompanySector
  • CompanySubsector

出于实际原因,我在代码中使用了“sector”和“subsectors”字样。

我试图在Active Admin - refresh second drop down based on first drop down, Ruby on Rails上使用@okliv建议,但没有成功。

1-我创建了一条路线

在#routes.rb

resources :companies

  post '/change_company_subsectors' =>'company_sectors#change_company_subsectors'

2-我定义了一个包含ajax请求的定义帮助器 在Helpers / ApplicationHelper.rb

    def remote_request(type, path, params={}, target_tag_id)
       "$.#{type}('#{path}',
             {#{params.collect { |p| "#{p[0]}: #{p[1]}" }.join(", ")}},
             function(data) {$('##{target_tag_id}').html(data);}
    );"
    end

3-我在admin / company.rb中输入以下方法:onchange action

    controller do
    def change_company_subsectors
      @company_subsectors = CompanySector.find_by_id(params[:company_sector_id]).try(:company_subsectors)
      render :text=>view_context.options_from_collection_for_select(@company_subsectors, :id)
      end
    end

4-在我的活动amdin表单admin / company.rb中,我在编辑表单中添加了这个:

form do |f|

f.inputs "company" do

  f.input :company_sector_id, :input_html => { 
    :onchange => remote_request(:post, :change_company_subsectors, {:company_sector_id => "$('#company_sector_id').val()"}, :company_subsector_id)
  }
  f.input :company_subsector_id
end

但结果非常糟糕:我甚至没有看到填充了Sectors和Subsectors可能性的下拉列表。

我应该看到各个部门:休闲/旅行/时尚......但我什么也看不见。 我也没有看到SubSectors。

我不应该使用像:as => :select, :collection => CompanySubsector.all

这样的formtastic Collections

有谁知道我犯错的地方?

1 个答案:

答案 0 :(得分:1)

首先,我建议不要将JS直接放在HTML元素上;它会使以后的调试变得更加困难。

这是我经常做的事情:

select1 = fieldset.find 'select:first' # Companies
select2 = fieldset.find 'select:last'  # Users
select1.change(->
  $.get '/admin/users.json', q: {company_id_eq: $(@).val()}, (data)->
    select2.html data.map (u)-> """<option value="#{u.id}">#{u.name}</option>"""
).change()