我在事件管理上实现表单时遇到问题,其中第二个下拉列表(子类别)必须调整到其前面的下拉列表中的类别选择。
基本上,我想首先为公司设置一个行业,然后在子行业下拉列表中进行选择。我创建了 2 个模型:
- 公司部门
- 公司子部门
出于实际原因,我在代码中使用了“扇区”和“子扇区”这两个词。
我正在尝试在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 操作
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
但结果非常糟糕:我什至没有看到包含“扇区”和“子扇区”可能性的下拉菜单。
我应该看到行业:休闲/旅行/时尚...但我什么也没看到。 我也没有看到子部门的任何内容。
我不应该使用格式集合,例如::as => :select, :collection => CompanySubsector.all
?
有谁知道我哪里出错了?
最佳答案
首先我建议不要将 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()
关于jquery - 事件管理 - 根据第一个下拉菜单的选择刷新第二个下拉菜单 (Rails 3.2),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20034892/