У меня есть поле (строка) в БД, в котором хранится список значений, полученных из флажка, если они отмечены:
Пример:
checkbox1 [X] //Value 1
checkbox2 [ ] //Value 2
checkbox3 [X] //Value 3
checkbox4 [X] //Value 4
checkbox5 [ ] //Value 5
Он хранит в базе данных строку «--- -'1 '-'3' -'4 '» (без двойных кавычек). Я не знаю почему, потому что в моей форме у меня есть:
<% SoProfile::LANGUAGES.each do |key, value| %>
<div class="fluid">
<%= f.label :languages,class: "checkbox" do %>
<%= key %> <%= f.check_box :languages, {:multiple => true}, value, nil %>
<% end %>
</div>
<% end %>
в модели (я не хочу использовать для этого таблицу БД):
LANGUAGES = { Espanol: 1, Ingles: 2, Portugues: 3, Italiano: 4, Mandarin: 5 }
в любом случае, он хранит эту строку «--- -'1 '-'3' -'4 '» для примера выше, я хочу показать флаг страны в соответствии с языком вместо того, чтобы указывать название языка.
Я создал для этого вспомогательный метод:
def insert_languages(string)
string.scan(/\d/).each do |i|
case i
when i == "1"
content_tag(:div,"",class: 'flag flag-co')
end
end
end
что, на мой взгляд, называется:
<tr>
<td>Idiomas <br />
<%= insert_languages(@so_profile.languages) %>
</td>
</tr>
Но вспомогательный метод не перейдет из .scan и распечатает хэш ["1" "3" "4"] напрямую, он никогда не достигает кода case, как если бы в строке был возврат. сканировать (.. строку кода.
Как я могу запретить рельсам возвращать хэш и вместо этого печатать флаг?