未定義というのは、どいうことなのでしょうか?
likeDB
にはid
がしっかりあります。
どうすれば、このエラーは解決できますでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
@likes
とあるように、これはLike
のリストなので、1件単位の.question_id
をリスト全体に対して取ることはできません。
@likes.pluck(:question_id)
とすると、question_id
だけの配列をとれます。
投稿2017/07/24 09:11
総合スコア145184
0
コードと変数の単数複数から、UserにはLikeが複数紐付いており、Likeはそれぞれ1つのQuestionをもっているものと想像します。
まずモデルに関連を設定します
class User has_many :likes end class Like belongs_to :question end
関連については詳しくはRailsガイドの解説を読んでください https://railsguides.jp/association_basics.html
これで、
@user = User.find(params[:id]) #元のコードではfind_byになっていますが、主キーで検索する場合はfindを使う @likes = @user.likes #または @likes = User.find(params[:id]).likes
と書けるようになります。
@likesはUserに紐付いたすべてのLikeのコレクションになります。それぞれのLikeについてQuestionが欲しい場合、たいていのユースケースでは
@likes.each do |like| # User.find(...).likes.each でもよい question = like.question #questionを使って何かする end
と言うようなコードを書くことになるでしょう。ビューでの処理でも、Questionを取り出してからビューに渡すのではなく、ビューの中で上記のように書けば良いです。
どうしてもQuestionのコレクションが必要な場合は
@questions = Question.where(id: @user.like_ids) #ActiveRerocrd::Relation @questions = Question.find(@user.like_ids) #Questionの配列
ということも出来ます。(どうしても、の場合です。このようにIDの配列で検索しなければならないのはIDの配列自体がデータで渡されているのでない限りたいていの場合データの扱い方がまずいせいですので他の書き方がないか探した方が良いです)
Questionのコレクションではなく、Userに紐付いた多数のLikeのうちの1つのQuestionだけが欲しい場合は
@question = @likes.first.question
のように、firstやlastを使って一つのLikeを取り出します。どれを取り出すかは、orderを使ってソート順を指定し制御します。
投稿2017/07/24 12:29
総合スコア1449
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/07/24 09:37 編集