我在 Ruby on Rails 上使用 Active Admin Gem。我有一个表格,我在其中选择了类别和子类别,然后相应地我必须填写数据。所以我在事件管理资源中添加了 sqlite 创建了两个表。
一切正常,但子类别的下拉列表未根据所选类别进行过滤。
我也是 Ruby 和 RoR 的新手。我不知道如何在选择类别后刷新子类别的下拉列表。
我知道我可以通过 AJAX 和 javascript 做到这一点,但我不知道在哪里编写代码?
此外,在 Active Admin 中是否有任何特定的过滤器可以在没有 ajax 或 javascript 的情况下实现。
任何想法或帮助将不胜感激。
最佳答案
我不知道 Active Admin 中是否有任何特定的过滤器可用,但我用这 3 步的方式解决了它(假设类别 - 是房子,子类别 - 是公寓):
第一步:定义包含ajax请求的助手
(当然,你得在routes.rb中预定义path
)
#application_helper.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
第 2 步:为 :onchange
操作添加此方法
#admin/inhabitants.rb (DSL with formtastic)
form do |f|
f.inputs do
#...
f.input :house, :input_html => {
:onchange => remote_request(:post, :change_flats, {:house_id=>"$('#house_id').val()"}, :flat_id)
}
f.input :flat
#...
end
end
第三步:渲染过滤结果
(你可以渲染部分而不是 :text
,我决定把它留在一个 activeadmin 资源文件中)
controller do
def change_flats
@flats = House.find_by_id(params[:house_id]).try(:flats)
render :text=>view_context.options_from_collection_for_select(@flats, :id, :flat_number)
end
end
关于ruby-on-rails - Active Admin - 根据第一个下拉菜单刷新第二个下拉菜单,Ruby on Rails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9579402/