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