【发布时间】:2011-02-11 08:48:20
【问题描述】:
我已经构建了一个带有 ruby on rails 的博客应用程序,并且我正在尝试实现搜索功能。博客应用程序允许用户标记帖子。标签在它们自己的表和belong_to :post 中创建。创建标签时,标签表中的记录也会创建,其中标签的名称为 tag_name 并由 post_id 关联。标签是字符串。
我试图允许用户以任何顺序搜索任何单词 tag_name。这就是我的意思。假设一个特定的帖子有一个标签是“ruby 代码控制器”。在我当前的搜索功能中,如果用户搜索“ruby”、“ruby 代码”或“ruby 代码控制器”,就会找到该标签。如果用户输入“ruby controller”,它将不会被找到。
基本上我要说的是,我希望在搜索中输入的每个单词都被搜索,而不一定是输入到搜索中的“字符串”。
我一直在尝试提供多个文本字段以允许用户输入多个单词,并且也一直在玩弄下面的代码,但似乎无法完成上述操作。我是 ruby 和 rails 的新手,如果这是一个明显的问题,我很抱歉,在安装 gem 或插件之前,我想我会检查一下是否有一个简单的修复。这是我的代码:
查看:/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 %>
标签控制器
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
标签模型
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
【问题讨论】:
标签: ruby-on-rails ruby search