collection_select可以用于对抗yaml文件吗?

ard*_*igh 1 yaml ruby-on-rails internationalization

我的Rails应用程序当前使用collection_select来选择下拉等的查找值.这有两个好处:

  1. 值是一致的
  2. 所选值的id存储在数据库中,而不是文本值

例如:edit.html.erb

<div class="field">
  <%= f.label :course_type %><br />
  <%= f.collection_select :course_type, Lookup.find(:all,:conditions => ["model_name = 'course' and field_name = 'course_type'"]), :id, :lookup_text, include_blank: false,:prompt => "Course Type" %>
</div>
Run Code Online (Sandbox Code Playgroud)

course_controller.rb

private
  def get_lookups
    @course = Course.find(params[:id])
    @course_type = Lookup.find(@course.course_type).lookup_text
Run Code Online (Sandbox Code Playgroud)

show.html.erb

<b>Course type:</b>
<%= @course_type %>
Run Code Online (Sandbox Code Playgroud)

我的应用程序将是多语言的,Rails通过使用区域设置文件来处理这个问题.

问题是:是否可以(并且明智地)从yml文件而不是模型/表中填充查找值,并且可以轻松扩展以处理多种语言吗?如何用基于yml的代码替换上面的代码?

Hen*_*k N 6

一种解决方案是在DB中保留翻译,也许使用我们的Traco lib.我怀疑它会起作用collection_select.

如果你想从你的翻译YML文件中提取选项,我建议options_for_select.总而言之:

en.yml

en:
  my_options:
    one: "Option 1"
    two: "Option 2"
Run Code Online (Sandbox Code Playgroud)

视图:

select_tag :foo, options_for_select(t("my_options").invert)
Run Code Online (Sandbox Code Playgroud)

如果您翻译非叶键,Rails i18n会为您提供哈希值,例如"my_options".你需要的是invert因为options_for_select期望值之前的文本,而翻译哈希是另一种方式.