以下が現在のリレーションです。
class Hoge < ApplicationRecord belongs_to :hoge_category
class HogeCategory < ApplicationRecord belongs_to :big_hoge_category has_many :hoges
class BigHogeCategory < ApplicationRecord has_many :hoge_categories has_many :hoges, through: :hoge_categories
以下のように検索ワードに引っかかるものをjson形式にしてAPIを送信したいのですが、
親・中間テーブル・子テーブルのリレーションに沿ってデータを送信したいです。
具体的にはHoge
に結びついてるHogeCategory
とBigHogeCategory
のデータを抽出してAPIを送信したいです。
調べたところ、as_json
のinclude
オプションを使えばいけそうだったのですが、複数リレーションの場合の書き方がわかりませんでした。
どうすればよろしいでしょうか?
また、別の良い方法あったら教えてもらえると嬉しいです。
#HogesController hoges = Hoge.index( params[:keyword], nil, params[:hoge_category_id], params[:offset].to_i, 10 ).as_json(include: :hoge_category) #このコードだとhogeに結びついてるhoge_categoryまでしか表せれない render status: 200, json: { hoges: hoges } #View側にAPI送信
#Hoge.rb class Hoge < ApplicationRecord searchkick callbacks: :async, language: "japanese", word_middle: [:title, :message] def self.index(keyword, connect_id, hoge_category_id, offset, limit) #検索処理 where = {} if keyword.present? hoges = Hoge.search(keyword, fields: [:title, :message],misspellings: false, where: where, order: { created_at: :desc }, limit: limit, offset: offset).results else hoges = Hoge.search(fields: [:title, :message],misspellings: false, where: where, order: { created_at: :desc }, limit: limit, offset: offset).results end return hoges end def search_data { title: title, message: message, created_at: created_at, hoge_category_id: hoge_category&.id } end end
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/02 12:35