count(plan.id) を検索対象にしようとしているのですが、MySQLで
Mysql2::Error: You have an error in your SQL syntax;
となってしまいます。
環境
rails 5.2.4.4
ransack (2.3.2)
ruby '2.6.6'
mysql Ver 14.14
実装
こちらを参考にして実装しました。
エラー再現するだけに切り詰めてあります。
# models/asin.rb class Asin < ApplicationRecord has_many :plans, foreign_key: :a3_target, primary_key: :code ransacker( :a3_count){ Arel.sql('COUNT(plans.id) as a3_count') } # models/plan.rb class Plan < ApplicationRecord belongs_to :asin,foreign_key: :a3_target, primary_key: :code # AsinsController def index @q = Asin.left_joins(:plans).search(params[:q]) @models = @q.result.select('asins.id','asins.code','asins.asin','count(plans.id) as pcount'). group('asins.id','asins.code','asins.asin') @models.count end # index.html.slim = search_form_for @q do |f| = f.text_field(:a3_count_gt) = f.submit "絞り込み"
この状態で f.text_field(:a3_count_gt) に何も入れずに submitするとエラーは起きません。"3"を入れて submit すると @models.count の行で
Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'as a3_count > '3' GROUP BY asins.id, asins.code, asins.asin' at line 1: SELECT COUNT(*) AS count_all, asins.id AS asins_id, asins.code AS asins_code, asins.asin AS asins_asin FROM
asinsLEFT OUTER JOIN
plansON
plans.
a3_target=
asins.
code WHERE COUNT(plans.id) as a3_count > '3' GROUP BY asins.id, asins.code, asins.asin
となります。(見やすくするため区切りで改行を入れています)
生SQLで COUNT(plans.id) as a3_count > '3'部分をasin > 3とすると通ります。
COUNT(plans.id) > '3'もしくは(COUNT(plans.id) as a3_count) > '3' とするとERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'GROUP BY asins.id, asins.code, asins.asin' at line 1
となります。
どの様にすれば解決できますでしょうか
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。