我想要一个小的下拉菜单,用户可以在其中选择网站的语言。为此,我有
<%= f.select(:lang, options_for_select([%w(中文 ch), %w(English en), %w(日本語 jp), %w(한국어 kr)], 'en')) %>
我希望这个出现在所有页面上,我认为没有必要将它存储在模型中,所以我想用虚拟的属性来制作它。
我对于在何处/如何制作此虚拟属性感到有点困惑:lang以便所有页面上都显示下拉列表,并且语言在用户访问网页时仍然存在。我应该在我的application_controller.rb中创建一个getter / setter方法吗?
谢谢!
答案 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,它应该可以工作。