我想要使用Ruby 祖先作为父类别,但我收到了这个错误:

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

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

推荐答案

Issue

你使用插值法

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

如果@category是新纪录,那它还没有id.这意味着它在Ruby中是nil:

@category.id
# => nil

插补nil时,它会强制转换为空字符串:

nil.to_s # => ""

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

Solution

因此,最好使用另一个包含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} %>

Ruby-on-rails相关问答推荐

Rails HotWire和View Components:涡轮框架不会取代内容

如何将POST-CSSS-IMPORT与TRANWIND-RACKS和IMPORT映射一起使用

如何判断字符串中是否包含列值

nginx 中的 Rails 7 Active Storage - 图像中途停止加载 net::ERR_HTTP2_PROTOCOL_ERROR 200

在bash中匹配带有空格字符的字符串

在 Rails 6.1 升级后,作业(job)规范使用 Minitest::UnexpectedError 包装错误

Selenium chromedriver:无法从不可键入的键构造KeyEvent

如何在 Rails 中注释掉 ERB?

Rails 路由到唯一索引

如何从 Rails 路由中删除控制器名称?

Gem 更新:在从 ASCII-8BIT 到 UTF-8 到 US-ASCII 的转换中,无法将 "\xE7" 转换为 UTF-8

FactoryGirl + Faker - 为数据库种子数据中的每个对象生成相同的数据

Rails:删除级联与依赖销毁

rspec 共享示例与共享上下文

不带参数的 request.fullpath

我可以将默认值传递给 rails 生成迁移吗?

Django 还是 Ruby-On-Rails?

Rails Rake 任务 - 访问模型类

如何设置 MiniTest?

ActiveRecord 何时会保存关联?