我在主动管理员上实施表单时遇到问题,其中第二个下拉列表(子类别)必须调整到其前面的下拉列表中的类别选项。
基本上我想首先为一家公司设立一个行业,然后选择子行业下降。我创建了2个模型:
出于实际原因,我在代码中使用了“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
?
有谁知道我犯错的地方?
答案 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()