【问题标题】:Finding objects based on a string comparison with ActiveRecord and Rails基于与 ActiveRecord 和 Rails 的字符串比较查找对象
【发布时间】:2012-08-12 13:24:26
【问题描述】:

我有一个输入字符串,例如香蕉,我试图在数据库中找到相应的对象。该对象具有仅包含第一个字母的下限属性和上限属性。它们的长度没有定义。所以下限可以是“a”或“ananas”,上限可以是“b”或“ban”。如果给定的输入字符串以介于范围之间的字母开头,则以下查询有效:

scope :by_name, lambda {|input_string| where('lower_limit <= :input AND upper_limit >= :input', input: input_string) }

但如果上限由搜索字符串的首字母组成,则比较失败,因为 'banana' > 'ban'。

如何更改查询以使其起作用?

我正在使用 Ruby 1.9.3、Rails 3.2.3 和 ActiveRecord 3.2.3。

【问题讨论】:

  • 给我们比“香蕉”更复杂的例子
  • 我的问题是 'b' 不大于 'b' 后跟任何其他字符。这些字符串并不比下面提供的示例复杂。

标签: ruby-on-rails ruby string activerecord range


【解决方案1】:

尝试使用 input: input_string[0..1] 代替

【讨论】:

  • 未定义限制字符串的长度。它可以是 1 个字母或 2、3、4、... 个字符。一个范围可以是“a”-“ba”,下一个可以是“bb”-“flag”。我不知道跟随哪个范围,并且可能不存在直接跟随的范围。
  • 所以你没有解决这个目标?开始绘制带有可疑输入数据和预期结果的表格可能会更好?
  • 输入数据由一个完整的单词组成(可以是任何东西),预期结果由所有匹配的范围对象组成(可以是 0..n)。类似于以下 tsql 查询的内容将解决上限SELECT * FROM myTable WHERE upper_limit = LEFT('banana', LEN(URL)) 的问题,并结合我在问题中的代码 sn-p。问题是我需要一个独立于数据库的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-22
  • 2019-09-18
  • 2023-03-23
相关资源
最近更新 更多