Присвоение имени массива переменной и сортировка в RoR - PullRequest
1 голос
/ 28 июля 2011

Абсолютный новичок RoR здесь, я пытаюсь сделать несколько лиг в цикле, увеличивая div_ # каждый раз, вот сокращенная версия, без HTML.Это работает, когда я жестко кодирую div_1 или div_2 для сортировки, но div_name не работает, даже если у него правильное содержимое, мне нужно, чтобы оно рассматривалось как массив.

<%  div_1 = Array.new
    div_1 << { :Name => 'Rob', :Played => '2', :Won => '1', :Lost => 1, :Points => 4}

    div_2 = Array.new
    div_2 << { :Name => 'Gavin', :Played => '2', :Won => '1', :Lost => 1, :Points => 4}

    for i in (1..2) 

    i = i.to_s
    div_name = "div_" + i 

    div_name.sort_by { |position| position[:Points] }.reverse!.each do |position| %>

<%= position[:Name] %>

1 Ответ

2 голосов
/ 28 июля 2011

Здесь много проблем:

div_1 = Array.new
div_1 << { :Name => 'Rob', :Played => '2', :Won => '1', :Lost => 1, :Points => 4}

div_1 теперь массив с одним элементом, который является хешем.Вам не нужен массив, если у вас будет только один элемент.

for i in (1..2) 

Где находится блок для этого цикла?После этого оператора i по-прежнему не определено, поэтому при вызове

i = i.to_s

вы получите NameError.

div_name = "div_" + i 

Даже если i == 1, div_nameбыть строкой со значением 'div_1', а не копией или экземпляром переменной div_1, которую вы определили выше.

div_name.sort_by { |position| position[:Points] }.reverse!.each do |position| %>

Теперь вы пытаетесь вызвать sort_by для строки, которая нене отвечайте на это, потому что это не имеет смысла.

<%= position[:Name] %>

В этой области не определена переменная с именем position.

Кроме того, когда вы обнаруживаете, что внутри тега <% %> вы помещаете много логики в представлениеэто признак того, что вам нужно переместить этот код в другое место, например, в контроллер.Вы можете определить и вычислить @positions как массив хэшей в контроллере, а затем в представлении сделать что-то вроде:

<% @positions.each do |position| %>
  <%= position[:name] %>
<% end %>
...