在可用语言环境的子集上全球化访问器

Globalize accessors on subset of available locales

根据设计,某些 类 将仅处理可用语言的子集。

globalize-accessors gem 还是比较有用的,但是渲染需要定义如下

Class.globalize_attribute_names

所以虽然 available_locales = [:en, :ru, :fr, :de],但目标是使用较小的数组 [:en, :ru]

documentation 表示 Calling globalize_accessors with no options will therefore generate accessor methods for all translated fields and available languages。但所谓的调用方式是在模型中

globalize_accessors :locales => [:en, :fr], :attributes => [:title] 

globalize_accessors方法如何引用数组,由

之类生成的东西
@post.owner.ownerlocales.pluck('locale')

(虽然数组值被引用...)

找到了一个可行的解决方案,但没有解决上述问题,是基于 globalize-accessors

gives you access to methods: title_pl, title_en, title_pl=, title_en=

因此,生成白名单的控制器方法

@locales =  []
@post.owner.ownerlocales.each do |ol|
  locale = ol.locale
  @locales.push(locale)
end

... 然后在视图中处理从白名单

中过滤掉 globalize_processors
<% Post.globalize_attribute_names.each do |lang| %>
  <% my_string = lang.to_s %>
  <% @locales.each do |locale| %>
    <% checkstring = "_" + locale %>
    <% if my_string.include? checkstring %>
      <div class="row">
        <%= t(lang[0..-4]) %> &nbsp;&nbsp;-&nbsp;&nbsp; <%= lang[-2, 2] %> <br />
        <%= f.text_area lang, rows: "3" %>
      </div>
    <% end %>
  <% end %>
<% end %>

效率不高,功能正常。