【发布时间】:2015-02-19 17:12:52
【问题描述】:
我已使用此tutorial 在我的图书应用程序中添加了高级搜索。一切正常,但现在我正试图通过标签找到一本书。
如果用户在 :keywords text_field 中输入一个标签,我就可以进行高级搜索。
有没有办法通过用逗号分隔关键字字符串来搜索各种标签?
(ex: fun, kid stories, action)
Would allow me to search books with fun OR kids stories OR actions.
如何通过逗号分隔的字符串搜索多个标签?
注意:我创建了一个我认为可以提供帮助的搜索方法,但我不确定如何将它与单个关键字搜索结合起来。
型号
class Book < ActiveRecord::Base
has_many :book_mappings
has_many :tags, through: :book_mappings
end
class BookMapping < ActiveRecord::Base
belongs_to :book
belongs_to :tag
end
class Tag < ActiveRecord::Base
has_many :book_mappings
has_many :books, through: :book_mappings
end
class Search < ActiveRecord::Base
def books
@books ||= find_books
end
def find_books
books = Book.order(:name)
###This works for a single word but NOT if I have multiple tags separated by commas
books = books.joins(:tags).where("tags.name like ?", "%#{keywords}%") if keywords.present?
books
end
def search(keywords)
return [] if keywords.blank?
cond_text = keywords.split(', ').map{|w| "name LIKE ? "}.join(" OR ")
cond_values = keywords.split(', ').map{|w| "%#{w}%"}
all(:conditions => (keywords ? [cond_text, *cond_values] : []))
end
end
观看次数
<%= form_for @search do |f| %>
<div class="field">
<%= f.label :keywords %><br />
<%= f.text_field :keywords %>
</div>
<% end %>
【问题讨论】:
标签: sql ruby search ruby-on-rails-4 tagging