Статические страницы в Ruby on Rails

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

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

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

Ответ 1

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

Подход № 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. Эти представления содержат любое содержимое, которое вы хотите на своих статических страницах. По умолчанию они будут использовать макет приложения app.html.erb.

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


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

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

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'

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

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

Ответ 2

Другим вариантом является high_voltage gem: https://github.com/thoughtbot/high_voltage

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

Ответ 3

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

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

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

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

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

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

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

Ответ 4

Jeff Approach # 1 отлично подходит для меня. Вот трюк, чтобы заставить контроллер динамически искать страницы. При этом вам не нужно прикасаться к контроллеру или route.rb для добавления страниц. Просто отпустите страницы под окнами/просмотрами/страницами, и контроллер найдет его.

class PagesController < ApplicationController
  def show
    render params[:id]
  end
end

Ответ 5

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

Ответ 6

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

Обратите внимание, что это очень полезно.

Ответ 7

конфигурации/routes.rb

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

приложение/контроллеры/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(или в любом формате шаблона.)

Ответ 8

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

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

Ответ 9

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