活动管理:基于另一个选择的嵌套“选择”输入

时间:2014-01-20 00:36:07

标签: ruby-on-rails activeadmin

我正在开发一个rails应用程序,我构建Active Admin来操作数据。 我有一个汽车经销商的以下型号:

class Make < ActiveRecord::Base
    has_many :models
end

class Model < ActiveRecord::Base
    belongs_to :make
    has_many   :cars
end  

class Car < ActiveRecord::Base
    belongs_to :model

    def make
        self.model.make
    end
end

我正在尝试调整ActiveAdmin“Car”模型中的表单,这样我就可以通过选择“make”来缩小模型范围,而不是从所有可用模型的大列表中选择模型。然后根据该品牌选择模型。

目前,我有这个:

ActiveAdmin.register Car do

    controller do
        def permitted_params
            params.permit!
        end
    end

    form :html => { :multipart => true } do |f|
        f.inputs "Project Details" do |c|
            f.input :vin
            f.input :year
        end
        f.inputs "Make and model" do
            f.input :maker, :as => :select, :collection => Make.all, :include_blank => false
            f.input :model, :as => :select, :collection => Model.where(make_id: 1), :include_blank => false, :selected => (car.model.id if !car.model.nil?)
        end
    end
end

这很好用,“模型”下拉列表中列出的模型是我编码的make_id = 1的模型。我希望模型能够反映所选择的“制造商”。并且可能是一个基于make更新模型列表的按钮。

我该怎么做?

2 个答案:

答案 0 :(得分:1)

目前,Active Admin中没有这样的内容,只有is a ticket for it

你可以自己简单地实现这个。类似的东西:

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>"

答案 1 :(得分:1)

我已将相同的功能集成到我的某个项目中。我已将其上传到以下github仓库:

https://github.com/abhidsm/dependent-select

希望你也在寻找相同的东西:)

相关问题