railsにて、テーブル同士を結合して一覧に出力する方法で、includeやjoinsなどを使うかと思いますが、
テーブル/モデルから条件をつけて抽出したオブジェクト同士をleftouterjoinして一覧に出力したのですが、joins,includes,などを使ってもうまく行きません。
具体的には、
[modelA]Menu(レストランとエリアによりメニューの価格が決まるとする
:menu_id
:restrant_id
:area_id
:price
[modelB]Restrant
:restrant_id
:restrant_name
[modelC]Restrant_point (ユーザがレストランのポイントを投稿してたとする)
:id
:restrant_id
:user_id
:restrant_point
で、この際に、 Menu -N:1- Restrant -1:N-Restrant_point
のようなリレーションとなっています。
やりたいこととしては、
・レストランごとに一覧表示。
・レストラン一覧には、ログインしているユーザに紐づく:restrant_pointが表示される。
・更に、メニューを選択すると、一覧にメニューの値段が表示される。
表としては、こんな感じです。
出力一覧イメージ
メニュー:オムライス
restrant_name | restrant_point | menu_price
レストランA | 100点 | 2000円
レストランB | 80点 | 1800円
・・・
いま考えている実装方法としては、
Ruby
1@restrant_points = RestrantPoint.where(user_id: current_user.id).includes(:restrant) 2#もともと、上記のような方法でレストランポイントが表示された一覧を出力していました。 3@menues = Menu.where(menu_id: params[:menu_id]) 4#選択したメニューはparamsで渡されます
このふたつのオブジェクトをleft _outer_joinsすれば良いのかな、と思って下記のようにためしています。
ruby
1@restrant_index = @restrant_points.joins(@menus) 2 → unknown class: Menu、と怒られます 3 4@restrant_index = @restrant_points.eager_load(@menus) 5 → ActiveRecord::ConfigurationError と言われます。 6
ちなみに、inner_joinしたくないのは、priceがない(そのメニューがない)レストランも一覧には表示しておきたいからです。
何か良い方法は無いものでしょうか?
そもそもの考え方が悪いのでしょうか?
よろしくお願い致します。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。