Есть ли способ генерировать представления отдельно с помощью команды rails generate? Я также хотел бы установить драгоценный камень, чтобы выполнить эту задачу. В принципе команда scaffolding дает мне слишком много, и я бы скорее закодировал мой контроллер вручную. Однако запись индексного представления с таблицей записей не будет очень эффективной.
Ruby on Rails Создание представлений
Ответ 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, и все готово.
Это больше работает, но может стоить того, если вы все время генерируете похожие взгляды.
Лучший вариант использования, который я могу придумать для этого подхода, - это если вы помечаете свою платформу белым цветом и вам нужно создать несколько файлов для профиля клиента.