Ruby on Rails生成视图



是否有一种方法可以使用rails生成命令单独生成视图?我也愿意安装一个宝石来完成这个任务,如果存在的话。基本上脚手架命令给了我太多,我宁愿手工编码我的控制器。但是,使用记录表编写索引视图的效率并不高。

您可以使用控制器生成器生成控制器和视图。

rails g controller controllername new create

这将创建动作newcreate及其相应的视图。

一种特殊的情况是当您想要向现有控制器添加视图时。

在这种情况下,只需使用常规命令,但要注意每次提示时都说'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 view NAME view [options]

要实现此目的,您需要执行以下操作。

rails generate generator view

这将在lib/generators/view/文件夹中为您生成一些文件。

打开view_generator。b . 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。动词和添加以下内容。

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

根据需要自定义模板视图。您需要添加_form.html。还有动词。在view_generator中添加任何额外的变量和逻辑。

这是更多的工作,但如果你发现自己总是生成类似的视图,这是值得的。

我能想到的这种方法的最佳用例是,如果你给你的平台贴上白色标签,并且需要为客户端配置文件生成多个文件。

相关内容

  • 没有找到相关文章

最新更新