Rails 4:语言选择和虚拟属性

时间:2013-08-11 19:57:13

标签: ruby-on-rails forms virtual-attribute

我想要一个小的下拉菜单,用户可以在其中选择网站的语言。为此,我有

<%= f.select(:lang, options_for_select([%w(中文 ch), %w(English en), %w(日本語 jp), %w(한국어 kr)], 'en')) %>

我希望这个出现在所有页面上,我认为没有必要将它存储在模型中,所以我想用虚拟的属性来制作它。

我对于在何处/如何制作此虚拟属性感到有点困惑:lang以便所有页面上都显示下拉列表,并且语言在用户访问网页时仍然存在。我应该在我的application_controller.rb中创建一个getter / setter方法吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

在您只想定义一次的许多页面上出现的内容通常被定义为帮助程序。

应用程序/助手/ application_helper.rb

class ApplicationHelper
  def language_select
    form_for :language, :url => some_path do |form|
      form.select(:lang, options_for_select([%w(中文 ch), %w(English en), %w(日本語 jp), %w(한국어 kr)], 'en'))
    end
  end
end

在您的观点中:

<%= language_select %>

答案 1 :(得分:0)

您可以将lang属性存储到会话中。使用ajax存储用户的选择。

在您的页面中

<%=select_tag(:lang, options_for_select([%w(中文 ch), %w(English en), %w(日本語 jp), %w(한국어 kr)], session[:lang]||'en'))%>

<script type="text/javascript">
$('#lang').change(function(){
  $.ajax({
    url: "languages/select",
    type: "GET",
    data: {'value=' + $('#lang').val() },
  })
});
</script>
app / controllers / languages_controller.rb中的

def LanguagesController
  def select
    session[:lang] = params[:value]

    render js: ''
  end
end
在config / route.rb中

,确保你有:

get "languages/select"

Javascript使用JQuery,看起来你正在使用Rails 4,它应该可以工作。