下記のようなモデルがあるとき、
ItemモデルのcategoryカラムとUserモデルのnameカラムでOR検索をしたいです。
つまりcategoryがある、もしくはuserのnameがあるというItemを取得したいです。
class User < ApplicationRecord # name, user_codeカラムをもつ has_many :items, foreign_key: :user_code, primary_key: :user_code, inverse_of: :user end class Item < ApplicationRecord # category, user_codeカラムを持つ belongs_to :user, class_name: "User", foreign_key: :user_code, primary_key: :user_code, optional: true end
↓のようなコードで試しているのですがうまくいきません。
Item.includes(:user).where(category: "hobby").or(Item.includes(:user).where("users.name = 'tom'"))
どのようにしたらよいでしょうか?
追記
Item.includes(:user).where("users.name = 'tom'")
この部分がとれてないようです。
SQLとしては、
SELECT * FROM items WHERE(users.name = 'tom')
のようになっているのですが、結果が以下のようになってしまいます。
includesがうまくできていないようです。
#<Item::ActiveRecord_Relation:0x2ae7b0251a30>
エラーメッセージ
ActiveRecord::StatementInvalid: PG::InFailedSqlTransaction: ERROR: current transaction is aborted, commands ignored until end of transaction block : SELECT "items"."id" AS t0_r0, "items"."category" AS t0_r1, "items"."user_code" AS t0_r2, "items"."created_at" AS t0_r3, "items"."updated_at" AS t0_r4, "users"."id" AS t1_r0, "users"."user_code" AS t1_r1, "users"."name" AS t1_r2, , "users"."created_at" AS t1_r3, "users"."updated_at" AS t1_r4 FROM "items" LEFT OUTER JOIN "users" ON "users"."user_code" = "items"."user_code" WHERE ("users"."name" = $1 OR "items"."category" = $2) ORDER BY "items"."id" DESC LIMIT $3
回答2件
あなたの回答
tips
プレビュー