Ruby on rails Rails 3中的复杂搜索屏幕

Ruby on rails Rails 3中的复杂搜索屏幕,ruby-on-rails,ruby,search,Ruby On Rails,Ruby,Search,我需要在Rails应用程序中实现一些搜索功能。我发现的大部分内容都是针对简单的纯文本搜索。我正在尝试实现更具体的东西。我希望创建的功能类型如下(来自C应用程序): 表单只提交用户输入的数据。因此,我需要将“3..7”之类的字符串转换为where方法的SQL条件,例如 TestLine.where( "test_int >= ? and test_int <= ?", MinInt, MaxInt ) TestLine.where(“test\u int>=”和test\u int

我需要在Rails应用程序中实现一些搜索功能。我发现的大部分内容都是针对简单的纯文本搜索。我正在尝试实现更具体的东西。我希望创建的功能类型如下(来自C应用程序):

表单只提交用户输入的数据。因此,我需要将“3..7”之类的字符串转换为where方法的SQL条件,例如

TestLine.where( "test_int >= ? and test_int <= ?", MinInt, MaxInt )

TestLine.where(“test\u int>=”和test\u int让我们看看思考狮身人面像(http://freelancing-god.github.com/ts/en/)。这可能会使您的任务更轻松。您可以在其中搜索:

FWIW您描述的特定功能实际上是直接支持的。嗯..差不多。来源:

散列中可以使用一个范围来使用SQL
BETWEEN
运算符:

Student.where(:grade => 9..12)
当然,接下来的问题是将用户的字符串输入转换为一个范围,这个范围不是很复杂,例如:

def str_to_range str
  str =~ /(\d+)\.\.(\d+)/

  Range.new *$~.captures.map(&:to_i)
end

它可能在您的模型上的
范围内最有意义(当然,一个快捷方式是简单地
eval'9..12'
,但是
eval
从最终用户那里获取输入是一个非常非常糟糕的主意。)

为什么不在您的模型中使用scope?包含图表的问题太棒了。+1谢谢,我目前正在研究这个问题。它看起来不错,但我不确定它是否真的优化到允许搜索每个模型的每个字段。谢谢我也在研究这个问题:我对从e C应用程序,但当我尝试它时,似乎我需要的位适合几页代码!这似乎是我将要采用的方法。我发现SQLite不喜欢字符串字段上的中间子句(我们有很多字段是字符串,但大部分是数字字段)因此,我将切换数据库来解决这个问题。注意这一点,因为字符串比较和数字比较的作用通常不同。因此,虽然
5
可能
在1和10之间,但
'5'
可能是也可能不是
在'1'和'10'之间(想想数学与字母顺序)。一种解决方法是将字符串转换为数字,例如,在cast(str_val as INT)和cast(other_str_val as INT)之间转换为
。这可能会为您省去切换数据库平台的麻烦。这一点很好,但主要是数字,我指的是类似“M37012883”的字符串(因此它不会转换)。在大多数数据库上,您可以在“M37012883”和“M37012921”之间运行,并可以看到该范围内的ID,这是使用通配符字符串搜索很难做到的。