Ruby on Rails, генерирующий представления - PullRequest
54 голосов
/ 10 апреля 2011

Есть ли способ генерировать представления отдельно, используя команду rails generate?Я также хотел бы установить драгоценный камень для выполнения этой задачи.По сути, команда scaffolding дает мне слишком много, и я бы предпочел кодировать свой контроллер вручную.Однако написание индексного представления с таблицей для записей будет не очень эффективным.

Ответы [ 4 ]

86 голосов
/ 10 апреля 2011

Если вы используете генератор контроллера, это сгенерирует действие контроллера и представление.

rails g controller controllername new create

Это создаст новые и создаст действия с соответствующими представлениями.

Вам все еще нужнонастроить маршруты вручную с помощью этого.

2 голосов
/ 04 февраля 2018

Одна конкретная ситуация, когда вы хотите добавить новый вид к существующему контроллеру.

В этом случае просто используйте обычную команду, ноосторожно произносить 'n' каждый раз при запросе, чтобы не перезаписывать существующие файлы.

Например, добавление представления с именем 'invite' в существующий контроллер с именем 'projects':

smith@ubuntuSrv16DEV4:~/railsapps/project_manager$ rails -v
Rails 5.1.4
smith@ubuntuSrv16DEV4:~/railsapps/project_manager$ rails generate controller projects invite
Running via Spring preloader in process 46253
    conflict  app/controllers/projects_controller.rb
Overwrite /home/smith/railsapps/project_manager/app/controllers/projects_controller.rb? (enter "h" for help) [Ynaqdh] n
        skip  app/controllers/projects_controller.rb
       route  get 'projects/invite'
      invoke  erb
       exist    app/views/projects
      create    app/views/projects/invite.html.erb
      invoke  test_unit
    conflict    test/controllers/projects_controller_test.rb
  Overwrite /home/smith/railsapps/project_manager/test/controllers/projects_controller_test.rb? (enter "h" for help) [Ynaqdh] n
        skip    test/controllers/projects_controller_test.rb
      invoke  helper
   identical    app/helpers/projects_helper.rb
      invoke    test_unit
      invoke  assets
      invoke    coffee
   identical      app/assets/javascripts/projects.coffee
      invoke    scss
    conflict      app/assets/stylesheets/projects.scss
    Overwrite /home/smith/railsapps/project_manager/app/assets/stylesheets/projects.scss? (enter "h" for help) [Ynaqdh] n
        skip      app/assets/stylesheets/projects.scss
smith@ubuntuSrv16DEV4:~/railsapps/project_manager$ 
2 голосов
/ 01 августа 2012

первая часть - это название модели / контроллера, вторая часть - действия.

0 голосов
/ 13 июля 2018

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

Если, как и я, вы хотите что-то более настраиваемое, вы можете достичь следующего.

Вы можете создатьваш собственный генератор, поэтому у вас есть что-то вроде этого.

рельсы генерируют представление NAME VIEW [опции]

Для достижения этого вам необходимо сделать следующее.

rails generate generator view

Это создаст несколько файлов для вас в папке lib / generators / view /.

Откройте файл view_generator.rb и добавьте следующий код.

<code>class ViewGenerator < Rails::Generators::Base
  source_root File.expand_path('templates', __dir__)
  argument :name, type: :string
  argument :action, type: :string

  def generate_view
    template "#{file_name}.html.erb", "app/views/#{folder_name}/#{file_name}.html.erb"
  end

  private

  def folder_name
    name.underscore
  end

  def file_name
    action.underscore
  end

  def type
    name.titleize.singularize
  end

  def down_type
    name.downcase.singularize
  end

  def render_form
    "<%= render 'form', #{down_type}: @#{down_type} %>"
  end

  def render_link_back
    "<%= link_to 'Back', #{folder_name}_path %>"
  end
end

Далее вам нужно создать файл, который мы используем с помощью фактического шаблона, используемого в методе generate_view.

Используя в качестве примера новое действие, создайте файл liblib / generators / view / new.html.erb идобавьте следующее.

<h1>New <%= type %></h1>

<%= render_form %>

<%= render_link_back %>

Настройте представление шаблона так, как вы хотите.Вам также необходимо добавить _form.html.erb.Добавьте все дополнительные переменные и логику в файл view_generator.rb, и все готово.

Это больше работы, но может стоить того, если вы все время генерируете подобные представления.

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

...