Статические страницы в Ruby on Rails - PullRequest
75 голосов
/ 18 декабря 2010

Каков стандартный способ создания приложения Ruby on Rails, которое будет иметь такие страницы, как

  • Главная * * 1004
  • О
  • Контакт

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

Ответы [ 9 ]

112 голосов
/ 18 декабря 2010

Зависит от того, как вы хотите обрабатывать контент на этих страницах.

Подход № 1 - хранить содержимое в представлениях

Если вы просто хотите поместить весь ваш контент в представления ERB, тогда очень простой подход - создать PagesController, целью которого является работа со статическими страницами. Каждая страница представлена ​​одним действием в контроллере.

pages_controller.rb:

class PagesController < ApplicationController
  def home
  end

  def about
  end

  def contact
  end
end

routes.rb:

match '/home' => 'pages#home'
match '/about' => 'pages#about'
match '/contact' => 'pages#contact'

Затем создайте представления home.html.erb, about.html.erb и contact.html.erb в разделе app / views / pages. Эти представления содержат любой контент, который вы хотите на ваших статических страницах. По умолчанию они будут использовать макет application.html.erb вашего приложения.

Вы также захотите изучить кэширование страниц , чтобы повысить производительность.


Подход № 2 - хранить содержимое в базе данных

Другой подход, который я использовал, - создать очень простую CMS для статических страниц. В этом случае страницы представлены в модели. Он использует friendly_id gem для обработки слагов для каждой страницы, чтобы их можно было получить по красивому имени в URL (например, / about), а не по идентификатору.

page.rb:

class Page < ActiveRecord::Base
  attr_accessible :title, :content

  validates_presence_of :title, :content

  has_friendly_id :title, :use_slug => true, :approximate_ascii => true
end

pages_controller.rb:

class PagesController < ApplicationController
  def show
    @page = Page.find(params[:id])
    render 'shared/404', :status => 404 if @page.nil?
  end
end

show.html.erb:

<%= raw @page.content %>

routes.rb:

match '/:id' => 'pages#show'

Примечание: поместите эту запись в конец Routes.rb, поскольку она соответствует всему.

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

24 голосов
/ 11 ноября 2011

Другой вариант - драгоценный камень high_voltage: https://github.com/thoughtbot/high_voltage

Это упрощает создание статических страниц, содержимое которых хранится в представлениях.

14 голосов
/ 27 июня 2015

Подход Джеффа № 1 (хранение контента в представлениях и наличие маршрута и действия контроллера для каждой статической страницы) хорош. Единственное, что я хотел бы добавить, это использовать макрос controller в ваших маршрутах.

Итак, вместо этого:

match '/home' => 'pages#home'
match '/about' => 'pages#about'
match '/contact' => 'pages#contact'

Вы можете сделать это:

controller :pages do
  get :home
  get :about
  get :contact
end

Это две дополнительные строки, но гораздо более элегантные, поскольку они исключают повторение и визуально группируют маршруты статических страниц.

Он также использует метод get http-глагола вместо match, , что является лучшей практикой для маршрутов Rails (и более кратким, теперь, когда Rails 4 требует, чтобы глагол http указывается при использовании match.

6 голосов
/ 15 марта 2014

Подход Джеффа № 1 прекрасно работает для меня. Вот трюк, чтобы заставить контроллер динамически искать страницы. При этом вам не нужно прикасаться к контроллеру или route.rb для добавления страниц. Просто поместите страницы в app / views / pages, и контроллер найдет их.

class PagesController < ApplicationController
  def show
    render params[:id]
  end
end
6 голосов
/ 18 декабря 2010

Ознакомьтесь с http://railstutorial.org Майкла Хартла, который поставляется в версиях 2.3.8 и 3.0.x.Это покрывает это большими примерами и ведет вас к их раннему построению, и у вас также будет возможность узнать намного больше, чем этот пример.Я очень рекомендую это.

2 голосов
/ 09 августа 2015

config / rout.rb

get ':id', to: 'pages#show'

app / controllers / pages_controller.rb

class PagesController < ApplicationController
  def show
    begin
      render params[:id]
    rescue ActionView::MissingTemplate
      render :file => "#{Rails.root}/public/404", :layout => false, :status => :not_found
    end
  end
end

Затем поместите ваши статические страницы в app / views / pages / {name} .html.erb (или любой другой формат шаблона)

1 голос
/ 22 октября 2012

Более подробно вы можете создавать статические страницы, используя Jekyll bootstrap или также Jekyll, используя блог Danger

См. Это очень полезно.

0 голосов
/ 16 июля 2013

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

0 голосов
/ 18 декабря 2010

Адекватный ответ на ваш вопрос в основном будет выглядеть как введение в среду Rails: структура MVC, шаблоны и маршрутизация DSL как минимум. Джефф сделал хороший удар, но его ответ все еще предполагает много базовых знаний Rails с вашей стороны.

Я бы сказал, что если ваше веб-приложение действительно так просто, Rails может быть излишним. Я бы посмотрел на что-то более легкое, например Sinatra , которое имеет гораздо более низкую кривую обучения, чем Rails, и отлично справляется с подобными задачами, не имея дело со сложной маршрутизацией, магическим MVC-действием / отображением шаблонов и т. д.

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