2015-09-25 2 views
0

Я установил механизм поиска для моей таблицы процедур после этого 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) 

Я хочу найти процедуры по имени, и эта ошибка делает его похожим на его поиск по идентификатору?

Вот вид:

 <%= 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 делает его выглядеть так легко Получите работу. Спасибо.

+0

Какую версию рельсов вы используете? – panmari

+0

Я использую rails 4 – hey

ответ

2

find(:all) очень старый и больше не доступен с рельсов 3.2. Вместо этого используйте where:

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

Любой, кто нахмурился от необходимости использовать строку SQL, может проверить это: 'scope: matching, -> (search) {arel_table [: name] .matches"% # {search}% "}' .. и подумайте, стоит ли это. –