Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使用通配符搜索Rails范围_Ruby On Rails_Ruby On Rails 3_Search_Sqlite_Wildcard - Fatal编程技术网

Ruby on rails 使用通配符搜索Rails范围

Ruby on rails 使用通配符搜索Rails范围,ruby-on-rails,ruby-on-rails-3,search,sqlite,wildcard,Ruby On Rails,Ruby On Rails 3,Search,Sqlite,Wildcard,我想在我的搜索中添加使用通配符的功能。我将Rails3与SQLite3一起使用。我的搜索使用模型中定义的范围内置到控制器的索引操作中 scope :by_drawing_number, lambda { |drawing_number| where('drawing_number LIKE ?', "#{drawing_number}") unless drawing_number.nil? } 我想对此进行修改,以便在用户输入“?”时,对于单字符通配符,它将被替换为“u”,对于多字符通配符,

我想在我的搜索中添加使用通配符的功能。我将Rails3与SQLite3一起使用。我的搜索使用模型中定义的范围内置到控制器的索引操作中

scope :by_drawing_number, lambda { |drawing_number| where('drawing_number LIKE ?', "#{drawing_number}") unless drawing_number.nil? }
我想对此进行修改,以便在用户输入“?”时,对于单字符通配符,它将被替换为“u”,对于多字符通配符,它将被替换为“%”


有没有办法将这些替换合并到我的作用域中,或者我需要将作用域作为一种方法重写?如果是这样,该方法应该是什么样的?

您可以将任何需要的逻辑放入范围内
scope
基本上只是定义类方法的语法糖。这样的事情应该行得通:

scope :by_drawing_number, lambda {|drawing_number|
  break if drawing_number.nil?
  match = drawing_number.tr('?*', '_%')
  where('drawing_number LIKE ?', match)
}

完美的谢谢唯一的问题是什么?而且uu应该被切换。