我正在我的Rails 4应用程序中创建一个搜索栏。我是我的用户db有‘名称’和‘电子邮件’列的用户的-我希望用户能够搜索其他用户的名字或id。
我现在得到的是:
ActiveRecord::RecordNotFound in UsersController#index
Couldn't find all Users with 'id': (all, {:conditions=>["name LIKE ?", "%hi@example.com%"]}) (found 0 results, but was looking for 2)有人知道我做错了什么吗?我看过铁路和一些论坛等,但目前还不能通过这一点。
index.html.erb:
<% form_tag users_path, :method => 'get' do %>
<p>
<%= text_field_tag :search, params[:search] %>
<%= submit_tag "Search", :name => nil %>
</p>
<% end %>模型/user.rb:
def self.search(search)
if search
find(:all, :conditions => ['name LIKE ?', "%#{search}%"])
else
find(:all)
end
endusers_controller.rb:
def index
@users = User.search(params[:search])
endroutes.rb:
get 'search' => 'users#index'发布于 2014-10-19 07:43:43
您正在使用Rails 4吗?find(:all, ...)是一种旧的方法。现在只找到身份证。使用:
def self.search(search)
if search.present?
where('name LIKE ?', "%#{search}%")
else
where(true)
end
end另外,present?将同时测试零和空白。请记住,根据数据库的不同,LIKE可能会非常慢。
发布于 2014-10-17 08:54:14
在rails中搜索
默认情况下,rails不支持全文搜索,.Activerecord查找器总是使用主键即查找记录。id。因此,我们需要一些其他的宝石或应用,如太阳黑子,elasticsearch等。
我会给你们展示太阳黑子solr在这里..。
在应用程序的gem文件中,只需添加以下代码.。宝石'sunspot_rails‘
group :development do
gem 'sunspot_solr'
end在终端中使用捆绑安装rails g sunspot_rails:install
这将添加solr并创建config/sunpot.yml文件。
耙太阳黑子:solr:开始rake太阳黑子:重新索引
编辑模型中的user.rb lile app/model/user.rb
Class User < ActiveRecord::Base
searchable do
text :name, :email
end
end应用程序/控制器/用户控制器. in
,然后添加索引函数。
def index
@search = User.search do
fulltext params[:search]
end
@users = search.results
end创建一个表单以接受用户的输入
<%= label_tag(:search, "Search for:") %>
<%= text_field_tag(:search) %>
<%= submit_tag("Search") %>
<% end %>https://stackoverflow.com/questions/26419642
复制相似问题