2014-11-06 3 views
0

Я смотрю на картинку с изображением Райана Бейтса (хотя и на более старую), где он реализует некоторые простые функции поиска. Я просто хочу получить лучшее понимание, поскольку я стараюсь реализовать что-то более сложное в своем приложении.Запрос на поиск через контроллер или модель

В контроллере он

def index 
@products = Product.search(params[:search]).paginate(:per_page => 5, :page => params[:page]) 
end 

, а затем метод класса (в модели) из

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

Его метод поиска в своей модели, где, как им мое заявление я построить свой поисковый запрос в моем контроллере

class PublicController < ApplicationController 

def rehomed 
conditions = {} 
conditions.merge!(animal_type: params[:animal_type]) if params[:animal_type].present? 
conditions.merge!(rehomed: params[:rehomed]) if params[:rehomed].present? 
conditions.merge!(users: {town: params[:animal_town]}) if params[:animal_town].present? 

@animals = Animal.joins(:user).where(conditions).paginate(:page => params[:new_page], :per_page => 6) 

end 

end 

Есть ли недостаток, который я делаю, или должен ли я создавать свой q uery в моей модели?

Thanks

+0

Я бы сделал это в модели, это просто кажется более чистым для меня. Не поклонник иметь много логики в контроллере, если я могу избежать этого. –

+0

ok следующий вопрос, тогда как я могу преобразовать то, что мне нужно использовать в модели? было бы большой помощью, если бы вы могли помочь – Richlewis

ответ

1

Это должно сработать.

def rehomed 
    @animals = Animal.search(params).paginate(:page => params[:new_page], :per_page => 6) 
end 

class Animal 
    def self.search(params) 
    animals = Animal.joins(:user) 
    animals = animals.where(animal_type: params[:animal_type]) if params[:animal_type].present? 
    animals = animals.where(rehomed: params[:rehomed]) if params[:rehomed].present? 
    animals = animals.where(users: {town: params[:animal_town]}) if params[:animal_town].present? 
    animals 
    end 
end