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ステートメントが何をしているのか混乱しています。私が必要とするストックオブジェクトを既に持っていると、データベースへの別の旅行がなぜありますか?
あなたのコントローラ上に、またはあなたのビュー内でそれを引き起こしている可能性のあるフィルタがありますか?モデルにはほかに何がありますか? –
ここで提供されている情報でできる限りあなたのアプリケーションを再現しています.2番目の「ストックロード」は表示されません。 –
私はそれを理解しました。私はトランザクションフォームを持っていることを断った。それはドロップダウンリストのためにストックオブジェクトをつかんでいて、それは第2の呼び出しを引き起こしていた。 –