【问题标题】:Ruby on Rails Generating ViewsRuby on Rails 生成视图
【发布时间】:2011-08-02 14:43:51
【问题描述】:

有没有办法使用 rails generate 命令单独生成视图?我也愿意安装一个 gem 来完成这个任务。基本上脚手架命令给了我太多,我宁愿手动编写我的控制器。但是,为记录编写带有表的索引视图效率并不高。

【问题讨论】:

  • 因为它是一张大桌子,有很多列,手工书写似乎违背了 Rails 生成器的某些目的
  • stackoverflow.com/questions/8114866/… 的可能重复项 - 您的问题可能被视为意味着您希望生成 only 视图,而不触及任何已经存在的内容,以下答案获胜'实际上并没有完成。

标签: ruby-on-rails-3 views scaffold


【解决方案1】:

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

rails g controller controllername new create

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

您仍然需要使用此手动设置路线。

【讨论】:

  • 如何指定模型/控制器来生成视图?
  • 为控制器生成视图。 rails g controller pages about contact 将创建文件 controllers/pages_controller.rbviews/pages/about.html.erbviews/pages/contact.html.erb
  • 如果我只想向现有控制器添加一个操作并希望自动创建视图页面怎么办
  • @HussainAkhtarWahid 据我所知,它没有生成器。手动操作相当简单。创建 view.html.erb 文件,向控制器添加一个新方法,然后更新您的路由。
  • 在 Rails 4 中,路由是自动生成的。
【解决方案2】:

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

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

【讨论】:

  • 这就是我要找的东西!
【解决方案3】:

第一部分是模型/控制器的名称,第二部分是动作。

【讨论】:

    【解决方案4】:

    正如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 文件中添加任何其他变量和逻辑即可。

    这需要更多的工作,但如果您发现自己一直在生成相似的视图,那么它是值得的。

    我能想到的这种方法的最佳用例是,如果您为自己的平台贴上白标签,并且需要为客户资料生成多个文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-27
      • 1970-01-01
      • 2013-04-18
      • 2013-05-08
      • 2014-08-22
      • 2019-03-09
      相关资源
      最近更新 更多