何をしたいか
Command.joins(:base).where("bases.status" => %w[task1A task2A])
で検索したい。
何が問題か
3件有るはずが0件となる。
現象
発行されているSQLを見るとSELECT COUNT(*) FROM
commandsINNER JOIN
basesON
bases.
id=
commands.
base_idWHERE
bases.
status IN ('task1A', 'task2A')
と WHEREで status がそのまま渡っています。
Base.where("bases.status" => %w[task1A task2A])
ですと SELECT COUNT(*) FROM
basesWHERE
bases.
status IN (11, 21)
とenumが変換されます。
Command.joins(:base).where("bases.status" => [11,21])
ですと3件hitします。
なにかよい方法は有るでしょうか。
enumのgemはあまり研究していないのですが、この解決に繋がるなにかよいgemなどありますでしょうか。
code
class Base < ApplicationRecord has_many :commands, class_name: "Command",dependent: :destroy enum status: { plan: 0, task1A: 11, task1X: 12, task1Y: 13, task1Z: 14, task2A: 21, task2X: 22, task2Y: 23, task2Z: 24, task4A: 41, task4X: 42, task4Y: 43, task4Z: 44, done: 60, task1A_fail: 81, task2A_fail: 82, task3A_fail: 83, cancel: 90} end class Command < ApplicationRecord attr_accessor :a3_target belongs_to :base, foreign_key: :base_id end class Plan < Base has_many :commands, dependent: :destroy,foreign_key: :base_id end
環境
rails 5.2.4.4
ruby '2.6.6'
mysql Ver 14.14
あなたの回答
tips
プレビュー