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