Я создал приложение для блогов w / ruby на рельсах и пытаюсь реализовать функцию поиска.Приложение блога позволяет пользователям отмечать сообщения.Теги создаются в их собственной таблице и belong_to :post
.Когда тэг создан, то же самое происходит с записью в таблице тэгов, где имя тэга равно tag_name и связано с post_id.Теги - это строки.
Я пытаюсь разрешить пользователю искать любое слово tag_name в любом порядке.Вот что я имею в виду.Допустим, в конкретном сообщении есть тег 'ruby code controller'.В моей текущей функции поиска этот тег будет найден, если пользователь ищет «ruby», «ruby code» или «ruby code controller».Он не будет найден, если пользователь введет «ruby controller».
По сути, я хочу сказать, что я хотел бы, чтобы каждое слово, введенное в поиске, искалось, а не обязательно «строка», вводимая в поиске.
Я экспериментировалс предоставлением нескольких текстовых полей, позволяющих пользователю вводить несколько слов, а также поэкспериментировал с приведенным ниже кодом, но, похоже, не может выполнить вышеуказанное.Я новичок в ruby и rails, так что извините, если это очевидный вопрос, и перед установкой гема или плагина я подумал, что проверю, есть ли простое исправление.Вот мой код:
Просмотр: /views/tags/index.html.erb
<% form_tag tags_path, :method => 'get' do %>
<p>
<%= text_field_tag :search, params[:search], :class => "textfield-search" %>
<%= submit_tag "Search", :name => nil, :class => "search-button" %>
</p>
<% end %>
TagsController
def index
@tags = Tag.search(params[:search]).paginate :page => params[:page], :per_page => 5
@tagsearch = Tag.search(params[:search])
@tag_counts = Tag.count(:group => :tag_name,
:order => 'count_all DESC', :limit => 100)
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @tags }
end
end
Tag Model
class Tag < ActiveRecord::Base
belongs_to :post
validates_length_of :tag_name, :maximum=>42
validates_presence_of :tag_name
def self.search(search)
if search
find(:all, :order => "created_at DESC", :conditions => ['tag_name LIKE ?', "%#{search}%"])
else
find(:all, :order => "created_at DESC")
end
end
end