<tr> "selected") %> "> <tr> "selected") %> "> <tr> "selected") %> " />

部分レンダリングでのコレクションの使用

私は、コレクションを部分的にレンダリングしようとしていますが、それを行うことができましたが、私が望むよりも部分的にループしています。ここに私の部分的なコードです:

        <table class="tabs">
            <tr>
                <% if tabs[:label] == selected %>
                    <%= tag("td", :id => "selected") %>
                <% else %>
                    <%= tag("td") %>
                <% end %>
                    
                    
                        <%= link_to tabs[:label], tabs[:url] %>
                    
                    
                </td>

            </tr>           
        </table>

        

そして私はそれを使ってタブの行を作りたいと思います(tdだけを繰り返します)。代わりに、それはすべてのものを通過し、コレクションの各メンバー用に新しいテーブルを作成します。テーブル、tr、およびhrタグを部分的に削除することなく、これを行うことは可能ですか?

TIA!

0

1 答え

Ruby on Railsを使用していると仮定し、 tabs はあなたのコレクションの名前です。そうであれば、それらを自分の部分的なものに移すことができます:

<td id="#{ tab[:label] == selected ? 'selected' : '' }" >
  
  <%= link_to tab[:label], tab[:url] %>
  
</td>

ifブロックを取り除くことによってどのようにロジックを簡略化したかを確認してください。インデントは何かが間違っていると言わなければなりません。この場合、ロジックはhtml構造を反映していませんでした。これは通常、より良い方法があることを意味します。タブは単数形であり、複数形ではありません。この部分的に1つのタブを処理しており、部分的に各タブごとに1回呼び出されます。

最後の1つ: id で遊ぶための機能上の理由がない限り、 id ではなく選択を使用する方がよいでしょう。

実装に戻る。あなたがそれをどのように呼び出すかを決定するので、私たちがその部分的な名前を付けることは重要です。この場合は、_tab.html.erb(単数形)とします。

これで元のファイルに残っています:

<table class="tabs">
  <tr>
  </tr>
</table>

新しい部分を呼び出すには、この1行だけを追加してください:

<table class="tabs">
  <tr>
    <%= render tabs %>
  </tr>
</table>

見る? tabs は複数形です。テンプレートヘルパーは、タブのタブごとに_tab.html.erb を呼び出します。

私はコードをテストしました。あなたはそれで金色になるはずです。

BTW, back on my soapbox for a moment... you don't see tables used for tabs much anymore, at least not in rails. The trend is on using

    with
  • 's inside and some CSS styling.

1
追加された