gpt4 book ai didi

ruby-on-rails - 使 rails 3 jquery 自动完成整数列工作

转载 作者:行者123 更新时间:2023-11-29 13:34:45 25 4
gpt4 key购买 nike

我想知道为什么 Rails 3 jquery autocomplete gem 在整数类型的列中不起作用。

顺便说一句,我有一个列名称代码。

autocomplete :category, :code

代码是整数,但每当我尝试实现自动完成时,它都不起作用。

已尝试 cast_to_text由问题参与者解决:https://github.com/greg-barnett/rails3-jquery-autocomplete/blob/13d20b087f261690553dff268ff39bb6893ddaa3/lib/rails3-jquery-autocomplete/orm/active_record.rb

但我不明白如何真正使用它,因为它也不起作用。

查看:

<%=f.autocomplete_field :category_id, autocomplete_category_code_project_procurement_management_plans_path, class:'cat-code',:full => true%>

PS:代码是我自己声明的主键。

set_primary_key "code"

这就是为什么,我真的需要将代码更改为整数,但自动完成似乎与它不兼容。

根据 Chrome 的“检查元素”功能。

网络日志:

ActiveRecord::StatementInvalid at /project_procurement_management_plans/autocomplete_category_code==================================================================================================> PG::Error: ERROR: function lower(integer) does not existLINE 1: SELECT categories.code FROM "categories" WHERE (LOWER(cate...
^HINT: No function matches the given name and argument types. You might need to add explicit type casts.: SELECT categories.code FROM "categories" WHERE (LOWER(categories.code) ILIKE '100%') ORDER BY categories.code ASC LIMIT 10(gem) activerecord-3.2.11/lib/active_record/connection_adapters/abstract_adapter.rb, line 291---------------------------------------------------------------------------------------------ruby 286 raise exception 287 end 288 289
def translate_exception(e, message) 290 # override in
derived class> 291<br/>
ActiveRecord::StatementInvalid.new(message) 292 end 293<br/>
294 end 295 end 296 end
App backtrace-------------Full backtrace-------------- - (gem) activerecord-3.2.11/lib/active_record/connection_adapters/abstract_adapter.rb:291:in translate_exception' - (gem)
activerecord-3.2.11/lib/active_record/connection_adapters/postgresql_adapter.rb:1145:in
translate_exception' - (gem) activerecord-3.2.11/lib/active_record/connection_adapters/abstract_adapter.rb:284:in rescue in log' - (gem)
activerecord-3.2.11/lib/active_record/connection_adapters/abstract_adapter.rb:275:in
log' - (gem) activerecord-3.2.11/lib/active_record/connection_adapters/postgresql_adapter.rb:661:in exec_query' - (gem)
activerecord-3.2.11/lib/active_record/connection_adapters/postgresql_adapter.rb:1248:in
select' - (gem)

等等。

任何解决方法将不胜感激。

最佳答案

如果仔细查看错误消息,您会发现问题出在这个 SQL 中:

SELECT categories.code
FROM "categories"
WHERE (LOWER(categories.code) ILIKE '100%')
ORDER BY categories.code ASC
LIMIT 10

特别是,PostgreSQL 不喜欢那个 LOWER 调用:

function lower(integer) does not exist

如果 categories.code 是一个数字,在生成的 SQL 中有两个问题:

  1. 你不能降低一个数字,小写一个数字没有任何意义。
  2. 您不能 ILIKE 数字,LIKE 和 ILIKE 用于字符串。

阅读 the code建议使用 :cast_to_text 选项会导致这样的查询:

SELECT categories.code
FROM "categories"
WHERE (LOWER(CAST(categories.code AS TEXT)) ILIKE '100%')
ORDER BY categories.code ASC
LIMIT 10

这会将 code 从数值转换为字符串,您可以根据自己的喜好降低和 ILIKE 字符串。

那么我们如何使用:cast_to_text呢? fine manual:full 选项包含此示例:

class ProductsController < Admin::BaseController
autocomplete :brand, :name, :full => true
end

所以大概你可以:

autocomplete :category
autocomplete :code, :cast_to_text => true

一切都会奏效。您可能还会注意到该手册没有提及 :cast_to_text 以及其他选项,因此您可能需要自己对其进行修补。

我自己不使用这个 gem,所以这里有一些猜测。


为什么自动完成 gem 将列 小写并执行不区分大小写的模式匹配是一个谜。我们可以放心地对这一切的陌生摇头并假装我们没有看到它。

关于ruby-on-rails - 使 rails 3 jquery 自动完成整数列工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15583606/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com