0

私はチェックボックスのシリアル化されたハッシュを持っており、私は選択されたキーだけを表示したいと思います。ディスプレイの選択方法シリアル化されたハッシュのキー?

モデル

class Policy < ActiveRecord::Base 
    belongs_to :user 
    serialize :shipping, JSON 
end 

ビュー

<ul> 
    <%= p.fields_for :shipping, @policy.shipping do |s|%> 
    <li><%= s.check_box :fedex %><%= s.label :fedex %></li> 
    <li><%= s.check_box :dhl %><%= s.label :dhl %></li> 
    <li><%= s.check_box :usps_10 %><%= s.label :usps %></li> 
    </ul> 
<% end %> 

BD

{"fedex":"1","usps":"0","dhl":"0"} 

ヴィ表示ワット

<ul> 
    <% if [email protected]? %> 
     <% @policy.shipping.keys.each do |key|%> 
     <li><%= key %></li> 
     <% end %> 
    <% end %> 
</ul> 

答えて

1

あなた@policy.shippingのでselectがあなたを整理する必要があり、昔ながらのハッシュする必要があります:あなたは1を買ってあげる場合

<ul> 
    <% if @policy.shipping.present? %> 
    <% @policy.shipping.select { |k, v| v == 1 }.keys.each do |key| %> 
     <li><%= key %></li> 
    <% end %> 
    <% end %> 
</ul> 

が、私は私の頭の上からわかりませんかあなたの値に'1'があるので、ブロックselectの中にv == '1'が必要な場合があります。

あなたは.present?(または!...nil?)をスキップすることができnil.to_aも同様[]であるという事実を利用することによってチェック:

<ul> 
    <% @policy.shipping.to_a.select { |k, v| v == 1 }.map(&:first).each do |key| %> 
    <li><%= key %></li> 
    <% end %> 
</ul> 

あるいは:

<ul> 
    <% @policy.shipping.to_a.select { |k, v| v == 1 }.each do |a| %> 
    <li><%= a.first %></li> 
    <% end %> 
</ul> 

そして、あなたはおそらく修正したいですあなたの元のビューが正しくネストされているか、または将来奇妙なものに遭遇する可能性があります。

<ul> 
    <%= p.fields_for :shipping, @policy.shipping do |s|%> 
    <li><%= s.check_box :fedex %><%= s.label :fedex %></li> 
    <li><%= s.check_box :dhl %><%= s.label :dhl %></li> 
    <li><%= s.check_box :usps_10 %><%= s.label :usps %></li> 
    <% end %> 
</ul> 
+0

mu!本当にありがとう!私はこのための解決策を見つけることを試みる私の首をほとんど壊していた!あなたは1の代わりに1を得るでしょう – dcalixto

関連する問題