2

我想达到什么目标

我有一个 html 选择框。选择框负责选择首选语言。例如,如果页面显示在德国,则选择框应显示德国作为其首选项,其他语言也是如此。

到目前为止做了什么

在 application.html.erb 我有以下代码

#application.html.erb

<select name="language" onChange="location = this.options[this.selectedIndex].value;">
    <% @langs.each_pair do |short, long| %>
    <option value="/<%= short %>/<%= @rem %>" <% if short==@langu %> selected="selected"<% end %>><%= long %></option>
    <% end %>
</select>

在 application_controller.rb 我有以下代码

#application_controller.rb
@string = request.fullpath
@langu  = @string.split("/")
@rem    = @string.split("/#{@langu[1]}/")
@langu  = @langu[1]
@rem    = @rem[1]

@langs = { :en => 'english', 
           :es => 'espaniol', 
           :de => 'germany', 
           :fr => 'french', 
           :it => 'italy' }

什么不工作

当用户查看英语/西班牙语/德语网站从列表中选择时,选择框显然应该显示特定语言。即如果英语然后英语,如果西班牙语然后espaniol 等等。这是不工作的确切事情

什么是有效的

如果用户从选择框中选择首选语言(比如说西班牙语),它会呈现特定页面,但是选择框显示本质上应该是espaniol.

谢谢!

4

2 回答 2

1

您的字符串中只有一个小错字。它应该是selected='selected',所以它应该像这样工作:

<select name="language" onChange="location = this.options[this.selectedIndex].value;">
<% @langs.each_pair do |short, long| %>
<option value="/<%= short %>/<%= @rem %>" <% if @short==@langu %> selected="selected"<% end %>><%= long %></option>
<% end %>
</select>
于 2012-11-21T16:22:32.213 回答
0

背景与解决方案

好,朋友们!由于无法找到解决琐碎问题的方法而花费并敲打我的头之后。我终于设法解决了这些错误。简而言之,在 application_controller.rb 中需要更改,其中我的语言(国家)数据集值采用哈希格式,实际上需要采用数组格式(请参阅上面的哈希格式问题)。除此之外,我还必须对 application.html.erb 进行一些细微的更改,请参阅下面的工作源代码

进行更改以使其正常工作

  • 哈希格式更改为数组格式
  • each.pair更改为仅每个

IN application_controller.rb

@langs = [['en','english'],
          ['es','espaniol'],
          ['de','germany'],
          ['fr','french'],
          ['it','italy']] 

在 application.html.erb

<select name="language" onChange="location = this.options[this.selectedIndex].value;">    
    <% @langs.each do |short, long| %>
        <option value="/<%= short %>/<%= @rem %>" <% if short==@langu %> selected="selected" <% end %>><%= long %></option>
    <% end %>
</select>

注意 感谢大家为解决此错误所做的努力。希望这对将来的人有所帮助。

于 2012-11-22T11:15:38.463 回答