【问题标题】:Simple search is not working in rails?简单搜索在 Rails 中不起作用?
【发布时间】:2015-12-23 16:03:40
【问题描述】:

我在此 railscast http://railscasts.com/episodes/37-simple-search-form?autoplay=true 之后为我的过程表设置了搜索机制。我几乎完全按照它,但是当我提交搜索时出现此错误:

ActiveRecord::RecordNotFound at /procedures

Couldn't find all Procedures with 'id': (all, {:conditions=>["name LIKE ?", "%Emergency%"]}) (found 0 results, but was looking for 2)

我想按名称搜索Procedures,这个错误让它看起来像是按id搜索?

这里是视图:

      <%= form_tag procedures_path, :method => 'get' do %>
      <p>
      <%= text_field_tag :search, params[:search], :id => "welcome-search" %>
      <%= submit_tag "Search Procedures", :name => nil, :class => "btn btn-success btn-lg" %>

我的控制器:

def index
  @procedures = Procedure.search(params[:search])
  render `procedures/index`
end

我的模特:

def self.search(search)
  if search
  find(:all, :conditions => ['name LIKE ?', "%#{search}%"])
else
  find(:all)
end
end

我很困惑,因为 railscast 让它看起来很容易开始工作..谢谢。

【问题讨论】:

  • 你用的是什么版本的rails?

标签: ruby-on-rails


【解决方案1】:

find(:all) 已经很老了,自 rails 3.2 起不再可用。而是使用where:

def self.search(search)
  if search
    where('name LIKE ?', "%#{search}%")
  else
    all
  end
end

【讨论】:

  • 任何因不得不使用 SQL 字符串而皱眉的人都可以检查一下:scope :matching, -&gt; (search) { arel_table[:name].matches "%#{search}%" } ...并考虑是否值得。