0

私のRailsアプリには、次のようなデータがあります。

[[{:car=>"", :article=>"", :group=>"", :price=>""},
  {:car=>"Volkswagen", :article=>"7H0127401A", :group=>"FILTER", :price=>"0,564"},
  {:car=>"Volkswagen", :article=>"7H0127401B", :group=>"FILTER", :price=>"0,546"}, 
  {:car=>"Volkswagen", :article=>"7H0127401D", :group=>"FILTER", :price=>"0,42"}], 
 [{:car=>"", :article=>"", :group=>"", :price=>""}, 
  {:car=>"Volkswagen", :article=>"7H0127401A", :group=>"FILTER", :price=>"0,564"}],   
 [{:car=>"", :article=>"", :group=>"", :price=>""}, 
  {:car=>"Volkswagen", :article=>"7H0127401B", :group=>"FILTER", :price=>"0,546"}]]

そして表示:

=@oem_art.each do |oem|
      -oem.each do |oo|
        %tr{:class => cycle("zebra-stripe zebra-grey zebra1", "zebra-stripe zebra-grey zebra2")}   
          %td
            = oo[:car]
          %td
            %h4
              = oo[:article]            
          %td
            = oo[:group]
          %td
            = oo[:price]

しかし、どうすればもっと美しい方法でそれを行うことができますか?また、空のキーでハッシュをスキップする方法は?たとえば、標準の1つのループを介してそれを行うにはどうすればよいですか?

=@oem_art.each do |oem|
          = oem.car
          %td
            =oem.price  

平らにするのはどうですか?しかし、ここでは役に立たない...

UPD

  def original_art
    @article = Article.find_by_ART_ID(params[:id])
    @constr_num = ArtLookup.get_construction_number(@article.ART_ID)
    oem_art = []
    @constr_num.each do |o|
      as_oem = get_from_as_oem(o.ARL_SEARCH_NUMBER)
      if as_oem.present?
        oem_art << as_oem
      end
    end    
    @oem_art = oem_art.to_a.uniq
    @article = Article.first
    @oem_art
  end
4

2 に答える 2

0

美しさは個人的な好みの問題であり、flatten入れ子になったループを避けるためにいくつかの有用性があります。

- @oem_art.flatten.reject { |h| h[:car].empty? }.each do |oem|
  = oem[:car]
  # And so on ...
于 2012-12-11T20:55:28.333 に答える
0

これが私が質問へのコメントで述べていたポイントです。あなたが持っている場合oem_art

[[{:car=>"", :article=>"", :group=>"", :price=>""},
  {:car=>"Volkswagen", :article=>"7H0127401A", :group=>"FILTER", :price=>"0,564"},
  {:car=>"Volkswagen", :article=>"7H0127401B", :group=>"FILTER", :price=>"0,546"}, 
  {:car=>"Volkswagen", :article=>"7H0127401D", :group=>"FILTER", :price=>"0,42"}], 
 [{:car=>"", :article=>"", :group=>"", :price=>""}, 
  {:car=>"Volkswagen", :article=>"7H0127401A", :group=>"FILTER", :price=>"0,564"}],   
 [{:car=>"", :article=>"", :group=>"", :price=>""}, 
  {:car=>"Volkswagen", :article=>"7H0127401B", :group=>"FILTER", :price=>"0,546"}]]

つまり、要素は次のとおりです。

1. [{:car=>"", :article=>"", :group=>"", :price=>""},
      {:car=>"Volkswagen", :article=>"7H0127401A", :group=>"FILTER", :price=>"0,564"},
      {:car=>"Volkswagen", :article=>"7H0127401B", :group=>"FILTER", :price=>"0,546"}, 
      {:car=>"Volkswagen", :article=>"7H0127401D", :group=>"FILTER", :price=>"0,42"}]

2. [{:car=>"", :article=>"", :group=>"", :price=>""}, 
      {:car=>"Volkswagen", :article=>"7H0127401A", :group=>"FILTER", :price=>"0,564"}]

3. [{:car=>"", :article=>"", :group=>"", :price=>""}, 
      {:car=>"Volkswagen", :article=>"7H0127401B", :group=>"FILTER", :price=>"0,546"}]

これを呼び出すoem_art.uniqと、重複する要素が削除されますが、3つの要素はすべて異なるため、何も削除されません。要素内から7H0127401Aと7H0127401Bの重複を実際に削除することはありません。

于 2012-12-11T21:49:36.523 に答える