我已使用此将高级搜索添加到我的图书应用程序
tutorial
。一切都很好,但现在我正试图通过标签找到一本书。
如果用户在:keywords text_field中输入一个Tag,我就可以进行高级搜索。
有没有方法通过用逗号分隔关键字字符串来搜索各种标签?
(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 %>