Подтвердить что ты не робот

Ruby on Rails Создание представлений

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

4b9b3361

Ответ 1

Вы можете генерировать контроллер и представление, используя генератор контроллера.

rails g controller controllername new create

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

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

Ответ 2

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

Ответ 3

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

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

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

[email protected]:~/railsapps/project_manager$ rails -v
Rails 5.1.4
[email protected]:~/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
[email protected]:~/railsapps/project_manager$ 

Ответ 4

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

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

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

рельсы генерируют вид ИМЯ ВИД [опции]

Для этого нужно сделать следующее.

rails generate generator view

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

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

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</pre>

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

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

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

<%= render_form %>

<%= render_link_back %>

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

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

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