2013-08-25 3 views
0

Я пытаюсь сделать глупую простую CMS для одного из моих клиентов, используя рельсы. Я создал строительные леса для Page и был успешным при создании и рендеринге этих страниц, однако маршрутизация уродливая.Понимание маршрутизации с рельсами

Прямо сейчас, если я хочу, чтобы посмотреть на домашней странице, я получаю URL, как это: example.com/pages/1

Я хотел бы выполнить 2 вещи:

Как настроить маршрутизацию так что example.com автомагически захватывает страницу под названием «дом»

и

Как настроить маршрутизацию так, что example.com/page/page_name выполняет

@page = Page.find_by name: 'page_name'

+0

Вместо того чтобы пытаться изобретать велосипед, посмотрите на https: //www.ruby- toolbox.com/categories/content_management_systems. Поскольку вам нужно что-то простое, Radiant может быть хорошо подходит. – CuriousMind

ответ

1

Q1:

Как настроить маршрутизацию так, что example.com автомагически захватывает страницу под названием "дом"

В `маршрутов.гь:

root :to => '[controller]#[action]' 
#'pages#home' for example, if your home page is in `pages_controller` 
# and uses the `home` action 

Q2:

Как настроить маршрутизацию так, что example.com/page/page_name выполняет
@page = Page.find_by имя: '' PAGE_NAME

match '/page/:name', :to => 'pages#some_name', :as => :some_name 

это генерировать бы следующее $rake routes:

some_name /page/:name(.:format) pages#some_name 

при ссылке (или перенаправлять или иначе доступ) эту страницу, вы бы написать

link_to "click this link!", some_name_path(@SomeModel.some_name) 
1

Чтобы выполнить первое, что вам нужно открыть файл routes.rb, который находится в папке конфигурации и добавить следующее:

root to: "home#index" 

Я предполагаю, что у вас есть контроллер с именем home, который содержит метод, называемый индексом, и это тот, который отображает домашнюю страницу. Если вы хотите, чтобы сделать это так же, как example.com/pages то вам придется использовать

root to: "pages#index" 

сделать общее правило, которое нужно использовать

root to: "controller#method" 

Не забудьте удалить index.html из общей папки тоже. Я рекомендую вам сделать заявку на блог здесь: http://guides.rubyonrails.org/getting_started.html Это может помочь вам разобраться больше.

+0

и, во-вторых, используйте драгоценный камень friendly_id –

1

Вот решение, предполагающее, что ваш контроллер имеет имя pages_controller вместо page_controller.

Добавьте эти маршруты в config/routes.rb:

root to: 'pages#show', page_name: 'home' 
get 'pages/:page_name', to: 'pages#show' 

Для контроллера app/controllers/pages_controller.rb:

class PagesController < ApplicationController 

    def show 
    @page = Page.find_by(name: params[:page_name]) 
    end 

end 

Примечание: В rails4 в find_by динамических искатели устарели ... так что если вы приложение на 4 вы должны изучить их. These docs have further details.

Кроме того, если вы просто пытаетесь получить статические поисковые URL-адреса, я бы определенно пошел с предложением Marian Theisen's и использовал friendly_id.

Смежные вопросы