Каков наилучший способ обработки вложенных статических страниц в рельсах? - PullRequest
2 голосов
/ 27 декабря 2011

РЕДАКТИРОВАТЬ: Извините, название немного неясно, я хотел использовать «полустатические» страницы, используя помощник рендера и ruby ​​vars.Система шаблонов ERB и т.д. Извините, ребята!Моя вина!

Я пытался создать вложенные полустатические страницы для приложения rails 3.1.3, которое я создаю, и мне еще не удалось найти ответ, который бы подходил всем моимнеобходимо.Есть идеи?

Все решения, с которыми я сталкивался, касаются создания просто страниц верхнего уровня, например:

- Site root
--- About (http://wwww.example.com/about)
--- Contact (http://wwww.example.com/contact)
--- Products (http://wwww.example.com/products)
--- Pricing (http://wwww.example.com/pricing

В то время как я ищусделать что-то вроде

- Site root
--- About (http://wwww.example.com/about)
------ What we do (http://wwww.example.com/about/what-we-do)
------ Another sub-page (http://wwww.example.com/about/another-sub-page)
--- Contact (http://wwww.example.com/contact)
--- Products (http://wwww.example.com/products)
------ Product One (http://wwww.example.com/products/product-one)
------ Product Two (http://wwww.example.com/products/product-two)
--- Pricing (http://wwww.example.com/pricing)

Я сталкивался с такими решениями, как сопоставление статических контроллеров для каждой из страниц, но это не выглядит особенно элегантным решением.

Или создание универсальногомаршрут и контроллер для сопоставления запросов, например так:

in routes.rb:
map.connect '*path', :controller => 'content', :action => 'show'

in content_controller.rb:
def show
  render :action => params[:path].join('/')
end

Но это кажется еще более не элегантным, есть ли другой способ, по которому я скучаю?

Ответы [ 4 ]

3 голосов
/ 27 декабря 2011

Есть ли другой способ, по которому я скучаю?

Да.

Все, что вам нужно сделать, это создать статические страницы, как вам требуется в /public,, либо в корне public, либо в структуре каталогов.

Физический файл, существующий по пути под /public, должен переопределять любые маршруты, которые вы настраиваете, для динамически генерируемых страниц.

1 голос
/ 06 марта 2014

Я сталкивался с подобной проблемой для статических подстраниц, нашел следующее решение.

В маршрутах.rb

match 'about/(:page)', :to => 'about#show', as: 'about'
match 'about/what-we-do', :to => 'about#show', as: 'what_we_do'

В файле about_controller.rb

class AboutController < ApplicationController
  def show
    unless params[:page].blank?
      render "about/#{params[:page].underscore}"
    end
  end
end

В ваших представлениях вы можете ссылаться на пути псевдонимов.

<%= link_to 'About', about_path %>
<%= link_to 'What We Do', what_we_do_path %>

Поэтому /about по умолчанию будет отображать представление about.html.erb.

Но /about/what-we-do будет отображать представление about/what_we_do.html.erb.

Поможет ли что-нибудь подобное решить вашу проблему?

1 голос
/ 27 декабря 2011

То, что сказал Дэн Сингерман, но также ... Просто поместите ваши статические страницы в отдельный fqdn, возможно, размещенный на cdn. Единственная причина, по которой рельсы служат статическим ресурсам, заключается в том, что вы ленивы и просто не можете быть обеспокоены тем, как делаете это правильно.

0 голосов
/ 27 декабря 2011

Это фактически то, что делает большинство CMS. Если вы чувствуете, что выполняете тяжелую работу, попробуйте подключить CMS, например, Refinery, к своему приложению. Это делает жизнь немного проще, заботясь о некоторых аспектах SEO. Если вас интересует, как Refinery CMS обрабатывает свои страницы, взгляните на Pages Controller и связанные с ним маршруты и магическое совпадение со всеми маршрутами .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...