Простая страница Ruby on rails без модели базы данных - PullRequest
3 голосов
/ 06 августа 2010

Я новичок в Ruby и Rails, так что это, вероятно, простой вопрос.

Как мне настроить простую страницу, которая не должна иметь собственных таблиц базы данных? В моем случае, например, у меня есть сайт, где хранятся песни и исполнители. Как я хочу просто простую страницу справки без интеллекта, просто статический HTML. Мне также нужна страница BROWSE, где пользователь будет выбирать, искать ли исполнителей или песни. На этой странице не будет таблиц базы данных, однако на ней будет список ссылок из A-Z с указанием количества сообщений для каждой буквы, поэтому необходимо взаимодействие с базой данных для таблиц, которые ей не принадлежат.

Должен ли я просто создавать контроллеры для HELP и BROWSE, или им также потребуются модели? Используя Rails 2, какие инструменты создания сценариев / генерации мне следует использовать и что я должен попросить их сделать для меня?

Ответы [ 5 ]

5 голосов
/ 06 августа 2010

Я обычно создаю PagesController, который показывает статические страницы, например about, faq или privacy.

Что вам нужно сделать, это сгенерировать контроллер с помощью

script/generate controller pages

затем добавьте следующее в config/routes.rb

map.resources :pages, :only => :show

В вашем PagesController

def show
  # filter the params[:id] here to allow only certain values like
  if params[:id].match /browse|help/
    render :partial => params[:id]
  else
    render :file => "/path/to/some/404_template", :status => 404
  end
end

Тогда вам просто нужно добавить партиалы в app/views/pages/

#in /app/views/pages/_help.html.erb

<p>This is the help section</p>
2 голосов
/ 06 августа 2010

Я использовал подход, показанный ниже в прошлом.Задайте именованный маршрут в config/routes.rb:

map.page ':page', :controller => 'pages', :action => 'show',
         :page => /browse|help/

- обратите внимание, что параметр :page ограничен определенными значениями (URL-адреса /browse и /help).Используя этот маршрут, вы можете создавать ссылки, подобные следующим:

<%= link_to 'Help', pages_path('help') %>

Наконец, создайте контроллер (app/controllers/pages_controller.rb):

class PagesController < ApplicationController
  def show
    render params[:page] # => renders /app/views/pages/<page>.html.erb
  end
end

Вы можете изменить метод show вконтроллер, если вам требуется больше гибкости.Например, вы можете использовать разные макеты для разных страниц.Для этого сценария вы можете ветвить логику на основе значения входящего параметра :page.

1 голос
/ 06 августа 2010

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

давайте рассмотрим страницу, которую вы хотите отобразить, about_us

добавить контроллер about_us_controller.rb с указанным в rout.rb

добавить представление about_us / index.html.rb

если вы хотите, чтобы представление не соответствовало ни одному макету, просто скажите

 render :layout => false

в вашем about_us.rb

1 голос
/ 06 августа 2010

Ну, если это чисто статично (как в * .html), вы можете просто добавить его в общую папку. Например:

публичный / test.html общественности / hello.html общественности / about.html

1 голос
/ 06 августа 2010

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

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