我在使用两个字符串理解高级搜索时遇到了问题 请帮忙
错误coms:
搜索模型中的未定义的方法`其中'对于#
<ActiveRecord::QueryMethods::WhereChain:0x007f2dcc0da5b0>
search.rb
def search_books
books = Book.all
books = books.where{["name LIKE ?","%#{keywords}%"]}if keywords.present?
books = books.where{["category LIKE ?","%#{keywords}%"]}if keywords.present?
return books
end
答案 0 :(得分:1)
使用如下所示:
keywords ='test'
与AND:
Book.where("name LIKE '%#{keywords}%' AND category LIKE '%#{keywords}%'") if keywords.present?
使用OR:
Book.where("name LIKE '%#{keywords}%' OR category LIKE '%#{keywords}%'") if keywords.present?
但这种用法并不安全。阅读Rails documentation中的以下警告:
将自己的条件构建为纯字符串可能会让您感到脆弱 到SQL注入攻击。例如,Client.where(“first_name LIKE '%#{params [:first_name]}%'“)不安全。
答案 1 :(得分:0)
如果您想使用范围进行搜索,可以在控制器中执行类似的操作
def index
@books = Book.all
# scopes
if params[:keyword].present?
@books = @books.by_keyword(params[:keyword])
end
end
然后在你的模型中做下面的
scope :by_keyword, ->(keyword) { where('name LIKE ? AND category LIKE ?', "%#{keyword}%", "%#{keyword}%").order(updated_at: :desc) if keyword.present? }