【发布时间】:2021-02-12 15:06:48
【问题描述】:
这里是新手!
ruby 2.7.1,gem --version 3.1.4,Rails 6.0.3.4
我的查询出现错误
def entry_uniqueness
if Entry.where("lower(from) = ? AND lower(to) = ?",
from.downcase, to.downcase).exists?
errors.add(:base, 'Identical combination already exists. YUP.')
end
end
错误:
PG::SyntaxError: ERROR: syntax error at or near "from" LINE 1: SELECT 1 AS one FROM "entries" WHERE (lower(from) = 'here' A... ^
完全错误
app/models/entry.rb:35:in
entry_uniqueness' app/controllers/entries_controller.rb:9:increate' 开始 POST ::1 在 2021-02-13 16:17:47 +0800 处理的“/entries” EntriesController#create 作为 HTML 参数: {"authenticity_token"=>"98sjupNso6NW5xUonE/414I7ZvJQETMPBNWS+jcN+PffHaAJ3K0pdQofVPgnrBfflYn2SDXMlB17Q2G/gzideA==", "entry"=>{"translation"=>"1", "from"=>"here", "to"=>"there"}, "commit"=>"翻译后"} [1m[36mEntry 存在? (10.2ms)[0m [1m[34mSELECT 1 AS one FROM "entries" WHERE (lower(from) = 'here' AND lower(to) = 'there') LIMIT $1[0m [["LIMIT", 1]] ↳ app/models/entry.rb:35:in `entry_uniqueness' 完成 500 内部 38 毫秒内的服务器错误(ActiveRecord:10.2 毫秒 | 分配:2140)ActiveRecord::StatementInvalid (PG::SyntaxError: ERROR: syntax 在“来自”第 1 行或附近出现错误:从“条目”中选择 1 作为其中之一 (lower(from) = '这里' A... ^ ): app/models/entry.rb:35:in
entry_uniqueness' app/controllers/entries_controller.rb:9:increate'
我想要实现的是:
| from | to |
-----------------
| Here | there |
=> 验证应该阻止用户添加heRE | THERE,但可以添加THERE | heRE
:from 和 :to 列在表 entries 中。
注意:我已经尝试过作用域,它们在唯一性方面起作用,但在不区分大小写时失败了????
validates_uniqueness_of :from, scope: :to
也试过了
validates_uniqueness_of :from, :scope => :to, :case_sensitive => false
也尝试了 @r4cc00n 的实现,但它不起作用
scope :get_entries_by_from_and_to, ->(from, to) { where(arel_table[:from].lower.eq(from)).where(arel_table[:to].lower.eq(to))}
validates_uniqueness_of :from, if: :entry_uniqueness?
def entry_uniqueness?
Entry.get_entries_by_from_and_to('from','to').nil?
end
【问题讨论】:
-
区分大小写的错误 => 错误范围?
-
区分大小写,因此失败。例如输入
Herethere是正确的唯一性验证,但HeReTheRe未能受到限制,因此不区分大小写失败 -
知道了,如果你想试试我的回答,希望对你有帮助????
-
能否请您发布您在 postgres 查询中收到的整个错误?
-
这是一个语法错误,输出只是在那之前。检查附加的新图片
标签: ruby-on-rails ruby validation ruby-on-rails-6