Rails 3.1 / Mongoid - Как найти модель по имени, а не по идентификатору в маршрутах - PullRequest
0 голосов
/ 10 октября 2011

Редактировать: Я использую Mongoid / MongoDB для своей базы данных, что означает, что я не получаю нормальные инструменты Active Record, я думаю.

У меня есть простое приложение Rails 3.1 смодель страницы.Я хотел бы сопоставить '/: customURL' с действием Show # для страницы с соответствующим: customURL.Как я должен изменить контроллер и маршруты?Имейте в виду, что есть несколько маршрутов из / SOMETHING, которые я хочу сохранить.Например, «/ pages» все равно должен перейти к моему действию Index # страницы, а не пытаться найти страницу с customURL «pages».

текущий контроллер:

def show
@page = Page.find(params[:id])
@title = @page.title

  respond_to do |format|
    format.html # show.html.erb
    format.json { render json: @page }
  end
end

маршруты:

resources :pages do
  resources :feeds
end

get "pages/index"
get "pages/show"
get "pages/new"

root :to => "pages#index"

Спасибо миллион.

1 Ответ

2 голосов
/ 10 октября 2011

Предполагая, что ваш Page имеет атрибут customURL из своей таблицы базы данных. В вашем контроллере:

def show
  @page = Page.first(:conditions => {:customURL => params[:customURL]})
  @title = @page.title

  respond_to do |format|
    format.html # show.html.erb
    format.json { render json: @page }
  end
end

На ваших маршрутах

resources :pages, :except => :show do
  resources :feeds
end

# Anything you want to match before the custom URLs needs to go above the next route definition
get "/:customURL" => "pages#show"    

root :to => "pages#index"
...