有没有办法使用railsgenerate命令单独生成视图?我也愿意安装一个 gem 来完成现有的任务。基本上,脚手架命令给了我太多的东西,我宁愿手动编写我的控制器。然而,用记录表来编写索引视图的效率不是很高。
您可以使用控制器生成器生成控制器和视图。
rails g controller controllername new create
这将创建操作
new
和 create
及其相应的视图。
您仍然需要手动设置路线。
一种特殊情况是当您想要向现有控制器添加 new 视图时。
在这种情况下,只需使用常规命令,但每次提示时请小心说
'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 生成视图 NAME VIEW [选项]
要实现这一目标,您需要执行以下操作。
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 为例,创建一个 filelib/generators/view/new.html.erb 并添加以下内容。
<h1>New <%= type %></h1>
<%= render_form %>
<%= render_link_back %>
根据需要自定义模板视图。您还需要添加 _form.html.erb。在 view_generator.rb 文件中添加任何其他变量和逻辑即可完成。
这需要更多工作,但如果您发现自己一直生成类似的视图,那么这是值得的。
我能想到的这种方法的最佳用例是,如果您对平台进行白标并需要为客户配置文件生成多个文件。
第一部分是模型/控制器的名称,第二部分是操作。
我创建了一个
https://github.com/coezbek/rails_view_generator
,仅用于创建脚手架视图,没有脚手架控制器或模型。
rails g view Model field:type field:type