2

何かがこれに属し、これにはその多くがあるリレーショナルデータベースがあります...特定のURLパラメーターの実際の例がありますが、反復するページに同じ概念を適用する方法を知りたいですすべてのデータベース。

コントローラ

  def index
    @lists = List.all

    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @lists }
    end
  end

@lists = List.allデータベース内のすべての値を取得して、それをビュー ページで使用し、それを繰り返して値を表示できるようにすることです。

ただし、それを繰り返してからIDを取得し、IDに基づいてデータベース内の別のテーブルを繰り返し処理したいと思います。同じコントローラー内に機能する別のメソッドがあります(どういうわけか、わかりません)

  def show
    @list = List.find(params[:id])
    @idea = @list.ideas.build
    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @list }
    end
  end

どこ@list = List.find(params[:id])でURLのパラメータを取得し、@idea = @list.ideas.buildどういうわけかそれを@listこのループを使用できる場所に関連付けます

<% @list.ideas.each do |idea| %>
  <div>
    <div class="list_idea_desc"><%= idea.description %></div>
  </div>
<% end %>

テーブルから値を取得し、ideas内のページ内に出力しますlist。しかし、この方法で反復している場合、インデックスページにすべて lists出力することはできません(url パラメーターなし): ideas

<% @lists.each do |list| %>

        <% @list.ideas.each do |idea| %>
          <div>
            <div class="list_idea_desc"><%= idea.description %></div>
          </div>
        <% end %>

<% end %>

これは理にかなっていますか?の反復からIDを取得し、そのIDをデータベース内の別のテーブルに接続する方法を理解しようとしているだけだと@lists思いますか?

ありがとう!

4

1 に答える 1

4

実際、あなたはまさにそれを行うことができます。に変更すればうまくいくと思い<% @list.ideas.each do |idea| %>ます<% list.ideas.each do |idea| %>

問題は@list、インスタンス変数 (おそらく設定されていないもの - どこにも設定されていない) であるのに対しlist、イテレータ ( .each) によって設定されたローカル変数であるということです。

サーバーは各リストに関連付けられたアイデアを取得するために 1 回の呼び出しを行うため、データベース内のリストの数が増えるにつれて、これは非常にゆっくりと実行される可能性があることに注意してください。これは、 eager loadingを使用して解決できます。

于 2013-04-29T05:51:28.477 に答える