Рельсы с моделями - PullRequest
0 голосов
/ 16 января 2012

Как мне использовать модель в моем файле config / rout.rb?я хочу выполнить следующие маршруты.

match '/:name', :topic => Post.where(:topic => name).first, :to => 'posts#search'

возможно ли это?

Ответы [ 2 ]

1 голос
/ 16 января 2012

@ Майкл прав - не помещайте код базы данных в файл маршрутов.Конечно, это возможно, но на самом деле это идет вразрез с конвенциями и принципами рельсов.

Лучшим подходом было бы:

resources :posts do
  collection { get :search }
end

Ваша поисковая форма будет выглядеть примерно так:

= form_tag(search_posts_path, :method => :get) do
  = text_input_tag(:q)

И ваш контроллер:

def search
  @posts = Post.where("body like ?", "%#{params[:q]}%")
end

Обратите внимание, что вы также обычно используете нумерацию страниц (will_paginate или kaminari) и, возможно, захотите рассмотреть систему полнотекстового поиска, такую ​​как sphinx.

1 голос
/ 16 января 2012

Маршруты к контроллерам, а не моделям. Кроме того, я бы порекомендовал не помещать выбор темы в такие маршруты. Большая часть правильных рельсов делает правильные вещи в правильной области.

Стандарты и основанные на REST системы склонны считать, что они часто одинаковы, например Контроллер сообщений управляет записями для модели Post с представлениями в app / views / posts, но это разные вещи.

Имея маршрут /:name для перехода к сообщениям #, поиск в порядке, однако я чувствую, что получение рассматриваемой темы должно осуществляться в контроллере сообщений. Если поиск выполняется по сообщениям, вы можете использовать вложенные ресурсы на своих маршрутах, например:

resources: :topics do
  resources :posts, :member => :search
end
...