programing

Ruby on Rails 생성 뷰

copyandpastes 2021. 1. 14. 23:34
반응형

Ruby on Rails 생성 뷰


rails generate 명령을 사용하여 뷰를 별도로 생성하는 방법이 있습니까? 나는 또한 존재하는 작업을 수행하기 위해 gem을 기꺼이 설치할 것입니다. 기본적으로 스캐 폴딩 명령은 나에게 너무 많은 것을 제공하고 오히려 컨트롤러를 손으로 코딩하고 싶습니다. 그러나 레코드 용 테이블로 인덱스 뷰를 작성하는 것은 매우 효율적이지 않습니다.


컨트롤러 생성기를 사용하여 컨트롤러와 뷰를 생성 할 수 있습니다.

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 기본 템플릿을 사용하여 모델에 대한 모든 뷰를 생성합니다.

나처럼 좀 더 사용자 정의 가능한 것을 원한다면 다음을 얻을 수 있습니다.

자신 만의 생성기를 만들어 이와 같은 것을 만들 수 있습니다.

레일은 뷰를 생성합니다. 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>

Next you need to create the file that we are using actual template used in generate_view method.

Using the action new as example, create a filelib/generators/view/new.html.erb and add the following.

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

<%= render_form %>

<%= render_link_back %>

Customize the template view as much as you want. You will need to add the _form.html.erb as well. Add any additional variables and logic in your view_generator.rb file and you are done.

It's more work but can be worth it if you find yourself generating similar views all the time.

Best use case I can think of for this approach is if you white label your platform and need to generate multiple files for a clients profile.

ReferenceURL : https://stackoverflow.com/questions/5614083/ruby-on-rails-generating-views

반응형