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

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

4 ответов


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

rails g controller controllername new create

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

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


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


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

в этом случае просто используйте обычную команду, но будьте осторожны, чтобы сказать '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$ 

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

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

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

рельсы генерируют представление имя представления [параметры]

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

rails generate generator view

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

откройте 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 в качестве примера, создайте filelib / generators/view / new.формат html.erb и добавьте следующее.

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

<%= render_form %>

<%= render_link_back %>

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

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

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