2016-09-24 3 views
0

私の在庫ポートフォリオアプリで、私はポートフォリオのショーページ内の在庫情報を取得するためにトランザクションオブジェクトをループしています。#includesをレールに使用して、在庫表を2回実行する

<% @portfolio.transactions.each do |trans| %> 
    <tr> 
    <td class="col-md-1"><%= trans.stock.symbol %></td> 
    <td class="col-md-1"><%= number_to_currency(trans.stock.last_price) %></td> 
    <td class="col-md-1"><%= trans.stock.name %></td> 
    <td class="col-md-1"><%= trans.stock.stock_exchange %></td> 
    <td class="col-md-1"><%= trans.num_of_shares %></td> 
    </tr> 
<% end %> 

portfolios_controllerマイ@portfolioオブジェクトが私のモデルは

class Transaction < ActiveRecord::Base 
    belongs_to :portfolio 
    belongs_to :stock 
end 

class Stock < ActiveRecord::Base 
    has_many :transactions 
end 

class Portfolio < ActiveRecord::Base 
    belongs_to :user 
    has_many :transactions 
    has_many :stocks, through: :transactions 
end 

私は、ポートフォリオのショーのページヒット時に私のログは次のようになりように定義されている

def show 
    @portfolio = Portfolio.includes(:transactions, :stocks).find(params[:id]) 
    @transaction = Transaction.new 
end 

次のように定義されます

Started GET "/portfolios/2" for ::1 at 2016-09-24 17:59:13 -0400 
Processing by PortfoliosController#show as HTML 
    Parameters: {"id"=>"2"} 
    Portfolio Load (0.2ms) SELECT "portfolios".* FROM "portfolios" 
    WHERE "portfolios"."id" = $1 LIMIT 1 [["id", 2]] 
    Transaction Load (0.4ms) SELECT "transactions".* FROM "transactions" 
    WHERE "transactions"."portfolio_id" IN (2) 
    Stock Load (0.3ms) SELECT "stocks".* FROM "stocks" WHERE 
    "stocks"."id" IN (3, 1, 14, 9) 
    Stock Load (0.3ms) SELECT "stocks".* FROM "stocks" 
    Rendered transactions/_form.html.erb (2.8ms) 
    Rendered portfolios/show.html.erb within layouts/application (5.5ms) 
    Rendered application/_nav.html.erb (0.7ms) 
Completed 200 OK in 39ms (Views: 33.8ms | ActiveRecord: 1.1ms) 

Iその2番目のStock Loadステートメントが何をしているのか混乱しています。私が必要とするストックオブジェクトを既に持っていると、データベースへの別の旅行がなぜありますか?

+0

あなたのコントローラ上に、またはあなたのビュー内でそれを引き起こしている可能性のあるフィルタがありますか?モデルにはほかに何がありますか? –

+0

ここで提供されている情報でできる限りあなたのアプリケーションを再現しています.2番目の「ストックロード」は表示されません。 –

+0

私はそれを理解しました。私はトランザクションフォームを持っていることを断った。それはドロップダウンリストのためにストックオブジェクトをつかんでいて、それは第2の呼び出しを引き起こしていた。 –

答えて

0

あなたが試みることができる:私は、問題は、それはあなたがやっていれば意味、Portfolioではなく、Transactionに関連が含まれていることかもしれないと思う

Portfolio.includes(transactions: [:stock]) 

@portfolio.stocksを、それがなされていないだろう別のdb呼び出しが、@transaction.stock.nameを実行すると呼び出しを行いました。

それがうまくいけばいいのですか?

関連する問題