チェックボックスがオンになっている場合、チェックボックスから取得した値のリストを格納するフィールド (文字列) が DB にあります。
例:
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 %>
モデルで(これにはDBテーブルを使用したくありません):
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"] を直接出力します。つまり、文字列にリターンがあった場合のように、ケース コードに到達することはありません。 scan(..コード行。
レールがハッシュを返さないようにして、代わりにフラグを出力するにはどうすればよいですか?