私は次のモデルを持っています:
サプライヤーには多くのsubmited_pricesがあります
Submitted_pricesには多くのprice_itemsがあります
submit_pricesやprice_itemsがない場合にコードがクラッシュしないようにするために、私は以下を使用していました。
if supplier.submitted_prices.where(:purchaser_id => organization.id).last
&& supplier.submitted_prices.where(:purchaser_id => organization.id).last.price_items.where("item_id" => item.id).last
&& supplier.submitted_prices.where(:purchaser_id => organization.id).last.price_items.where("item_id" => item.id).last.unit_price.present?
order_item.unit_price = supplier.submitted_prices.where(:purchaser_id => organization.id).last.price_items.where("item_id" => item.id).last.unit_price
それから私はtry()に出くわしました:
order_item.unit_price = supplier.try(:submitted_prices).where(:purchaser_id => organization.id).try(:last).try(:price_items).where("item_id" => item.id).try(:last).try(:unit_price)
問題は、WHERE制約でtry()を実行する方法がわからないことです。この制約は、tryがnilを返すと失敗します。
NoMethodError Exception: undefined method `where' for nil:NilClass
try()をWHERE制約にラップする方法はありますか?