- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 ransacker 方法将我的字段之一从整数转换为字符串
ransacker :invoice_no do
Arel.sql("to_char(invoice_no, '9999999')")
end
我正在使用 PostgeSQL 9.1 并且我已经测试过在 psql 中手动执行它,如下所示,它有效
select to_char(invoice_no, '9999999') AS invoice_no from invoices;
尝试使用 :invoice_no_cont 搜索 ransack 时出现的错误是
Invoice Load (1.3ms) SELECT "invoices".* FROM "invoices" WHERE "invoices"."ledger_id" = 2 AND (to_char(invoice_no, '9999999') ILIKE 0) ORDER BY invoice_no desc LIMIT 10 OFFSET 0
PG::UndefinedFunction: ERROR: operator does not exist: text ~~* integer
LINE 1: ...edger_id" = 2 AND (to_char(invoice_no, '9999999') ILIKE 0) O...
^
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
: SELECT "invoices".* FROM "invoices" WHERE "invoices"."ledger_id" = 2 AND (to_char(invoice_no, '9999999') ILIKE 0) ORDER BY invoice_no desc LIMIT 10 OFFSET 0
Rendered invoices/index.json.rabl (3.6ms)
Completed 500 Internal Server Error in 12.3ms
ActiveRecord::StatementInvalid - PG::UndefinedFunction: ERROR: operator does not exist: text ~~* integer
LINE 1: ...edger_id" = 2 AND (to_char(invoice_no, '9999999') ILIKE 0) O...
^
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
: SELECT "invoices".* FROM "invoices" WHERE "invoices"."ledger_id" = 2 AND (to_char(invoice_no, '9999999') ILIKE 0) ORDER BY invoice_no desc LIMIT 10 OFFSET 0:
activerecord (3.2.17) lib/active_record/connection_adapters/abstract_adapter.rb:285:in `rescue in log'
activerecord (3.2.17) lib/active_record/connection_adapters/abstract_adapter.rb:280:in `log'
activerecord (3.2.17) lib/active_record/connection_adapters/postgresql_adapter.rb:659:in `exec_query'
activerecord (3.2.17) lib/active_record/connection_adapters/postgresql_adapter.rb:1262:in `select'
activerecord (3.2.17) lib/active_record/connection_adapters/abstract/database_statements.rb:18:in `select_all'
activerecord (3.2.17) lib/active_record/connection_adapters/abstract/query_cache.rb:61:in `block in select_all'
activerecord (3.2.17) lib/active_record/connection_adapters/abstract/query_cache.rb:75:in `cache_sql'
activerecord (3.2.17) lib/active_record/connection_adapters/abstract/query_cache.rb:61:in `select_all'
activerecord (3.2.17) lib/active_record/querying.rb:38:in `block in find_by_sql'
更新
我在 AngularJS View 中使用 invoice_no_cont,就像这样。
<td data-title="'Invoice No.'" sortable="'invoice_no'" filter="{'invoice_no_cont':'text'}">
{{invoice.invoice_no}}
</td>
这是通过对 Ruby on Rails 服务器 invoice#index 方法的“GET”请求传递的,该方法随后将其提取并通过搜索发送。
@invoices = Invoice.search(params[:filter]).result
最佳答案
这是我对你的问题的解释:
您忘记的是,当您将 JSON 数据发送回 Rails 服务器时,它会解析 JSON 负载。尽管您认为您正在返回一个字符串,但 json gem 会解析该值并看到一个 Integer,如 gem's parser documentation 中所述。 .
这意味着即使你认为你得到的是一个字符串,params 哈希实际上得到一个整数作为过滤键的值,这就是:
operator does not exist: text ~~* integer
正在提示。 Postgres 希望与字符串进行比较,而不是整数。
简单的解决方法是将 to_s 添加到 Controller 中的 params[:filter]。
@invoices = Invoice.search(params[:filter].to_s).result
这样您就可以确保始终比较字符串。这也是对作为过滤器发送的输入进行容错的好方法。
你也可以不使用 ransacker 而在你的 Controller 中做类似的事情,它可能更符合发票号码的实际性质,但更难看。
@invoices = params[:filter].is_a?(Integer) ? Invoice.search(params[:filter]).result : []
希望这能解决您的问题。
关于ruby-on-rails - 使用 ransacker 对整数 to_char 进行洗劫,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25131568/
SELECT TO_CHAR((select logical_date -1 from logical_date where logical_date_type='B'),'DD/MM/YYYY HH
在下面,为什么 to_char() 中不包含夏令时?我怎样才能获得夏令时的时间? SELECT systimestamp AT TIME ZONE 'Australia/Adelaide' from
好的,所以我想转换日期值以正确格式化我的日期以进行比较,但是,将我的“DATE”数据类型转换为 char 会影响在该字段上进行比较时的索引吗?我可以通过执行 to_date(tochar()) 来解决
我有一个数据库列 amount [Data type Number(32,12)]。当我在 amount 字段上使用 to_char 时我在输出中附加了一个斜杠值。 当我直接使用存储在金额字段中的值时
我有这个问题: SELECT hora FROM table; 我得到了“09:45:00” 现在,我试图从该时间戳中获取小时数,并且我正在尝试: SELECT TO_CHAR(hora,'HH24'
希望轻松调整。我用谷歌搜索并没有找到任何关于此的内容。我正在使用 DBvis 客户端对 Postgres 数据库表运行查询。 我在 Oracle 和 PostgreSQL 查询中经常使用 to_cha
1》以12小时制显示 SQL>select to_char(sysdate,'YYYY-MM-DD HH12:MI:SS AM')from dual; TO_CHAR(SYSDATE,'YY
我有一个类似的查询: SELECT STUFF FROM TABLENAME WHERE TO_CHAR(STARTDATE, 'DD-MON-YYYY') > '01-OCT-2015' 我的结果集
我不知道这是错误还是什么,但是当我尝试使用 Oracle 中的 to_char 函数以某种方式格式化星期几时,SQL Plus 给我这个错误:ORA-01821:日期格式无法识别 这是导致问题的行 S
给定一个通用整数类型 IntType ,很容易确定 std::to_chars 所需的缓冲区类型对基数为 10 的数字的操作: std::array::digits10 + 1 + std::is_s
这个其实很简单,但我找不到任何有用的东西。 在我的 SQL 查询中,我有一些具有单个比例值的舍入数字 - round(number,1)。如果数字四舍五入为某个十进制数字,它会以“9,9”格式打印。
我需要有关从 SQL 到 MySQL 的等效 to_char 的帮助,这几乎就是我正在尝试做的事情 SELECT to_char(cus_inf.column1) no_operation 我需要将其
当我运行 JPQL NamedQuery 时,它会给出错误信息,例如: Syntax error parsing [SELECT empolyee.value From Empolyee empoly
我正在尝试使用 to_char 格式化一个带有时区的时间戳列,因为我不想包含该列的区域部分,但是运行 to_char 和不运行它的查询之间的区别就像 10 秒很多时间,我对数据库没有太多经验,也许我做
我希望格式化一个 float ,以便它以下列方式显示: 999.999.990,00 我目前正在使用 to_char 函数: to_char(SUM(amount::float)/100, '999G
我想选择这种格式的日期:2018-11-25T16:00:00Z 所以我试着这样做: select to_char(registration_date, 'YYYY-MM-DDTHH24:MI:SSZ
我从中生成一个 View : create or replace view datetoday as select to_char(dt, 'yyyy-mm-dd') as date, to_char
我试图找出一个 to_char() 的格式规范,它会给我以下结果。 to_char(0.1, '[FORMAT_SPEC]') 给出 0.1 和: to_char(1, '[FORMAT_SPEC]'
我有一个包含数字列的表,我正在尝试使用 oracle sql 函数 to_char 对其进行格式化。根据列的显示方式,结果是否会出现尾随空白。 SELECT '[',TO_CHAR(ABS(Bal
这个问题在这里已经有了答案: What is the best way to escape non-format characters in Oracle's to_char? (1 个回答) 7年前
我是一名优秀的程序员,十分优秀!