ruby ActiveRecord::Statement在类别中无效#new

ecfsfe2w  于 2023-10-17  发布在  Ruby
关注(0)|答案(1)|浏览(79)

我想对父类别使用gem ancestry,我收到了这个错误:

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

我不知道该怎么办了...这是我第一次得到这个错误

hsgswve4

hsgswve41#

问题

你用插值法

Category.where("id != #{@category.id}").order(:name)

如果@category是新记录,则它还没有id。这意味着它在Ruby中是nil

@category.id
# => nil

当你插值nil时,它会转换为空字符串:

nil.to_s # => ""

这是因为错误消息中有(id != )

解决方案

因此,最好使用另一个查询not

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

相关问题