Techioz Blog

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} %>