質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Active Record

Active Recordは、一つのオブジェクトに対しドメインのロジックとストレージの抽象性を結合するデザインパターンです。

Q&A

1回答

1199閲覧

Rails 関連モデルのデータのみを抽出する

lyzmfeqpxs54

総合スコア237

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Active Record

Active Recordは、一つのオブジェクトに対しドメインのロジックとストレージの抽象性を結合するデザインパターンです。

0グッド

0クリップ

投稿2020/03/20 03:29

いつもお世話になっております。
以下のようにモデルを作成している状況です

Userモデル

  1. name:string
  2. password:string

Ornerモデル

  1. name: string
  2. password:string: string

Likeモデル

  1. user_id
  2. orner_id

オーナーがユーザーをお気に入りできることを想定しております。
Likeモデルはオーナーのidとユーザーのidをもって誰が誰をお気に入りしたかを判定しています。

ここからが質問なのですが、そのオーナーモデルがお気に入りしたものをだけを抽出したデータが欲しいと考えています。
現状以下のようにコーディングしており、お気に入りしたユーザーのみを取り出すことはできたのですが、ページネーションに用いているkaminari部分でエラーがでしまいます。

kaminariはUser.allなどの形式で渡す必要があるのでusers_aryを同じような形式にすれば解決できるとは思ってはいるのですが、正しい方法として関連モデルのみを抽出したいと考えこちらに質問させていただきました。

調べ方が悪いとは思うのですが、ググっても分からずこちらに質問させていただきました。
参考になるサイトでも構いませんので、適切な方法をご教示いただけますと幸いです。

可能であれば配列をActiveRecordの形式(User.allのような)形式に変更する方法、合わせてご教示いただけましたら助かります。

よろしくお願いいたします。

ruby

1 2#app/model/ 3# user.rb 4class User < ApplicationRecord 5 has_secure_password 6 has_many :like 7end 8 9# post.rb 10class Post < ApplicationRecord 11 has_many :like 12end 13 14# like.rb 15class Like < ApplicationRecord 16 belongs_to :investor 17end 18 19 20コントローラー 21 22 def show 23 # オーナーのお気に入りをすべて選択 24 likes = Like.where(orner_id: orner_id) 25 users_ary = [] 26 # ユーザーの情報を入れていく 27 likes.each do |like| 28 user = User.find_by(id: like.user_id) 29 if !user.nil? 30 users_ary.push(user) 31 end 32 end 33 34 # ここでエラー(kaminariではたぶんですが配列は扱えない) 35 @users = users_ary.page(params[:page]).per(Page_num) 36 37 # 以下のような形でユーザの情報を取ってきたい 38 User.where(Likeモデルの特定のorner_idの情報をkey) 39 end 40

環境
Amazon Linux release 2 (Karoo)
Rails 5.2.3
Ruby version: 2.6.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

class Like に
belongs_to :user
belongs_to :orner, class_name: "User"
を定義してください。
class User の has_many :like は user_idとつながってますが、一方 orner_id とも繋がる必要が有ります。その関連も定義しておきたいです。
例えば

has_many :orned_likes, feign_key: :orner_id has_many :liked_users, class_name: "User",through: :orned_likes

そうしますと
user.orned_likes で likeした全てが user.liked_users でそのuserが取れます。
そこで
orner = User.find(orner_id) としておいて
@users = orner.liked_users.page(params[:page]).per(Page_num)
で行けるかと

投稿2020/03/20 23:49

winterboum

総合スコア23329

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問