如何将country_select gem 与best_in_place编辑集成



我正在使用 best_in_place gem 内联编辑记录,country_select呈现可供选择的国家/地区列表。使用 best_in_place 编辑选择字段时,我这样做:

<%= best_in_place(@home, :country_name, :type => :select, :collection => [[1, "Spain"], [2, "Italy"]]) %>

现在,我想获取country_select拥有的所有国家/地区的列表,并将其传递到集合参数中。country_select gem 提供了一个简单的帮助程序来呈现选择字段:

<%= country_select("home", "country_name") %>

我想替换best_in_place助手中的 :collection 参数以包含 country_select 提供的国家/地区列表。我知道best_in_place期望 [[键,值]、[键、值],...] 输入到 :collection 中,但我不确定如何做到这一点。请指教。谢谢

只需执行以下操作即可:

<%= best_in_place @home, :country, type: :select, collection: (ActionView::Helpers::FormOptionsHelper::COUNTRIES.zip(ActionView::Helpers::FormOptionsHelper::COUNTRIES)) %>

在 Rails 5.2 中,假设你有 Country gem,你应该做:

<%= best_in_place @home, :country, type: :select, collection: ISO3166::Country.all_names_with_codes.fix_for_bip, place_holder: @home.country %>

fix_for_bip是我插入到 Array 类中的自定义函数,best_in_place因为它要求所有选择框数组以与常规选择框相反的顺序提供服务:对于常规 Rails 选择,您将给出一个[["Spain", "ES"], ["Sri Lanka", "SR"], ["Sudan", "SD"]...]数组(首先是用户看到的内容,然后是选项值)。所以这就是国家宝石返回的内容。但是,best_in_place collection:只接受相反类型的数组:[["ES", "Spain"], ["SR", "Sri Lanka"], ["SD", "Sudan"]] 。当并非所有数组项本身都是双项数组时,它也会出现一个问题 - Rails 选择框会自动处理。所以我创建了一个fix_for_bip函数,当将它们馈送到best_in_place时,我调用我所有的数组:

class Array
  def fix_for_bip
    self.map { |e| e.is_a?(Array) ? e.reverse : [e, e] }
  end
end
如果你在

几年后使用 rails 4 ,这可以解决问题:

<%= best_in_place @cart.order, :country_name, type: :select, :collection =>  ActionView::Helpers::FormOptionsHelper::COUNTRIES%>

相关内容

  • 没有找到相关文章

最新更新