如果从帮助方法栏

时间:2018-05-26 04:16:32

标签: ruby-on-rails ruby-on-rails-4 internationalization rails-i18n

您好不知道如何解释这个,但我会尽力给它。

我有这样的模型

class Answer < ActiveRecord::Base
  EMPLOYMENT_TYPE = [
    ['Employed', I18n.t('self_evaluation.self_evaluation_form.employment_status.employed')],
    ['Self-Employed', I18n.t('self_evaluation.self_evaluation_form.employment_status.self_employed')],
    ['Unemployed / Retired', I18n.t('self_evaluation.self_evaluation_form.employment_status.unemployed')]
  ]
end

我还有一个调用此

的辅助方法
module AnswerHelper
  def get_employment_type_list
    return Answer::EMPLOYMENT_TYPE
  end
end

部分视图应该显示像这样的值

_step_1.html.erb

<% employment_list = get_employment_type_list %>
<%= employment_list %>
<div class="flex_center flex_column button-wrap">
  <%= collection_radio_buttons("application[answer_attributes]", :employment_type, employment_list, :first, :last, item_wrapper_tag: false, checked: @selected_employment_type) do |b|
    b.label(class: 'employment_type_radio') { b.radio_button(:onchange => "return_employment_type(value)", class:'radio-label')  + b.label(class:'button-label'){b.text}}
  end %>
</div>

_step_2.html.erb

<% employer_list = get_employer_list(chosen_employment_type(@decoded_self_evaluation)) %>
<% employer_type = @decoded_self_evaluation.try(:loan_application).try(:kyc_answer).try(:employer_type) %>
<div class="flex_center flex_column button-wrap">
  <%= collection_radio_buttons("loan_application[kyc_answer_attributes]", :employer_type, employer_list, :first, :last, item_wrapper_tag: false, checked: employer_type) do |b|
    b.label(class: 'employer_type_radio') { b.radio_button(:onchange => "is_business_registered(value)", class:'radio-label') + b.label(class:'button-label'){b.text}}
  end %>
</div>

identity.js

$.ajax({
    url:'/self_evaluations/' + self_evaluation_id + '/employment_type',
    method:"POST",
    data:JSON.stringify({employment_type: employment_type, key: $('#token_key').val()}),
    contentType:"application/json; charset=utf-8",
    dataType:"script",
    async: false,
    success: function(data) {
      $valid = true;
    }
  })

employment_list.js.erb

$('#id_employer').empty();
$('#id_employer').append("<%=j render 'self_evaluations/self_evaluation_partials/step_2' %>");

现在问题是我已经在Rails中添加了I18n翻译所需的所有内容以及在html视图中翻译的文本,当我从不同的语言切换时,它可以正常工作但是对于通过像这样的辅助方法。基于初始帮助,在初始加载时,所有页面都工作正常但如果我更改语言然后运行加载jobs_list.js.erb的ajax调用我的语言环境似乎仍然是主要语言,值不会相应地更改< / p>

不知道为什么会出现这种情况之前发生过类似事情的人?

1 个答案:

答案 0 :(得分:0)

因为您在模型中将翻译声明为常量,所以在第一次加载Answer模型时,翻译只加载了一次。

production环境中,模型将在启动服务器后加载。在development环境中,将在文件内容更改时加载模型,...

为了解决您的问题,您可以在帮助程序中添加翻译:

module AnswerHelper
  def get_employment_type_list
    [
      ['Employed', I18n.t('self_evaluation.self_evaluation_form.employment_status.employed')],
      ['Self-Employed', I18n.t('self_evaluation.self_evaluation_form.employment_status.self_employed')],
      ['Unemployed / Retired', I18n.t('self_evaluation.self_evaluation_form.employment_status.unemployed')]
    ]
  end
end

我通常使用这种方法,请看看!

class Answer < ActiveRecord::Base
  EMPLOYMENT_TYPE = [:employed, :self_employed, :unemployed_or_retired]
end

module AnswerHelper
  def get_employment_type_list
    i18n_scope = 'self_evaluation.self_evaluation_form.employment_status'

    Answer::EMPLOYMENT_TYPE.map do |type|
      [type, t(type, scope: i18n_scope)]
    end
  end
end