数据库中有如下表:
def search
@room = Niu.where(params[:q]).all
end
search 方法中的查询条件该如何设定,能够在这个表中的所有字段中,查询包括这个关键词的所有记录。
class Niu < ActiveRecord::Base
...
scope :search, -> (q) { where(column_names.map{|n| "#{n}=:q"}.join(' or '), q: q) }
...
end
代码插入 model 后,前台出现这样的报错。
SyntaxError in NiusController#index
/home/f/railscode/excel/app/models/niu.rb:18: syntax error, unexpected tLPAREN_ARG, expecting keyword_do_LAMBDA or tLAMBEG
scope :search, -> (q) { where(column_names.map{|...
^
/home/f/railscode/excel/app/models/niu.rb:18: syntax error, unexpected tLAMBEG, expecting keyword_end
scope :search, -> (q) { where(column_names.map{|n| "...
^
/home/f/railscode/excel/app/models/niu.rb:18: syntax error, unexpected '}', expecting keyword_end
我的代码是这样的写的,相关的语法在哪里能够查到?请指教一二,错在哪里了?
scope :search, -> (q) { where(column_names.map{|n| "#{n}=:q"}.join(' or '), q: q) }
看来你的 ruby 版本是 2.0 以下的,把 -> 和 (q) 中间的空格去掉就可以了
scope :search, ->(q) { where(column_names.map{|n| "#{n}=:q"}.join(' or '), q: q) }
非常感谢,老问题都解决了,但我比较笨,新问题出现了。我输入 room 字段的值,有返回结果,但是输入其他列中的关键词,就没有返回空值。例如:网络,141 等。
你要的是模糊匹配吧
scope :search, ->(q) { where(column_names.map{|n| "#{n} like :q"} * ' or ', q: "%#{q.strip}%") }
模糊匹配查询是比较耗时的,而且索引也不会生效,要是数据量大,建议像 @qinfanpeng 说的用全文搜索, 推荐 https://github.com/ankane/searchkick
我没有调试明白,还是听从你的建议,用 gem 吧。不过,弱弱的问一句,将复杂多维的 excel 表格转换至数据库中,成为结构化的数据表,有没有更高效更简便的 gem。嘻嘻。。。。。