ActiveRecord::Statementカテゴリ#new で無効です
概要
親カテゴリに gem の祖先を使用したいのですが、次のエラーが発生しました。
ActiveRecord::StatementInvalid in Categories#new PG::SyntaxError:
ERROR: syntax error at or near ")" LINE 1: ...ECT "categories".* FROM "categories" WHERE (id != ) ORDER BY...
脳卒中:
<%= form.collection_select :parent_id, Category.where("id != #{@category.id}").order(:name), :id, :name, {include_blank: true} %>
もうどうすればいいのかわかりません…このエラーが発生するのは初めてです
解決策
問題
補間を使用します
Category.where("id != #{@category.id}").order(:name)
@category が新しいレコードの場合は、まだ ID がありません。これは、Ruby では nil であることを意味します。
@category.id
# => nil
nil を補間すると、空の文字列にキャストされます。
nil.to_s # => ""
それは、エラーメッセージに (id != ) が含まれているためです。
解決
したがって、そうでない別のクエリを使用することをお勧めします。
Category.where.not(id: @category.id).order(:name)
そして最後に
<%= form.collection_select :parent_id, Category.where.not(id: @category.id).order(:name), :id, :name, {include_blank: true} %>