0

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

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

我希望它出现在所有页面上,并且我认为没有必要将其存储在模型中,所以我正在考虑使用虚拟属性来制作它。

我只是有点困惑我应该在哪里/如何制作这个虚拟属性 :lang 以便下拉菜单出现在所有页面上,并且语言在用户访问网页的过程中持续存在。我应该在 application_controller.rb 中创建一个 getter/setter 方法吗?

谢谢!

4

2 回答 2

0

出现在许多页面上而您只想定义一次的东西通常被定义为助手。

app/helpers/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 %>
于 2013-08-11T21:04:13.510 回答
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,它应该可以工作。

于 2013-08-12T03:36:20.313 回答