Rails 스캐폴딩용 사용자 정의 템플릿
9805 단어 programmingrubywebdevrails

Rails에는 스캐폴딩이라는 빠른 개발을 위한 매우 편리한 도구가 있습니다. 어쨌든 일부는 손으로 작성해야 하기 때문에 종종 프로그래머는 이를 무시합니다. 커스텀 템플릿을 이용하여 수작업 코딩을 최소화할 수 있는 방법을 알려드립니다.
Rails에서 제공하는 템플릿을 재정의해야 합니다. 다음과 같은 방법으로 찾을 수 있습니다.
╰─ $ bundle show railties
/Users/sampleuser/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/railties-7.0.2.3
관심 있는 파일이 다음 경로에 있음을 의미합니다.
/Users/sampleuser/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/railties-7.0.2.3/lib/rails/generators/erb/scaffold/templates
이러한 파일을 재정의하려면 애플리케이션 디렉토리에 복사해야 합니다.
$ cp -a /Users/sampleuser/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/railties-7.0.2.3/lib/. ~/projects/custom-templates-app/lib
$ ls -la ~/projects/custom-templates-app/lib/rails/generators/erb/scaffold/templates
total 48
drwxr-xr-x sampleuser staff 256 Apr 7 10:56 .
drwxr-xr-x sampleuser staff 128 Apr 7 10:56 ..
-rw-r--r-- sampleuser staff 1247 Apr 7 10:56 _form.html.erb.tt
-rw-r--r-- sampleuser staff 343 Apr 7 10:56 edit.html.erb.tt
-rw-r--r-- sampleuser staff 465 Apr 7 10:56 index.html.erb.tt
-rw-r--r-- sampleuser staff 239 Apr 7 10:56 new.html.erb.tt
-rw-r--r-- sampleuser staff 762 Apr 7 10:56 partial.html.erb.tt
-rw-r--r-- sampleuser staff 413 Apr 7 10:56 show.html.erb.tt
이제 디자인에 적용할 수 있는 템플릿이 있습니다.
기본 템플릿을 사용하여 새 리소스를 생성해 보겠습니다.
$ rails g scaffold Post title:string description:text
$ rails db:migrate
그 결과 사이트 디자인에 맞게 수동으로 조정해야 하는 표준 템플릿을 얻게 되었습니다.


사용자 지정 스타일을 사용하도록 템플릿을 업데이트할 때입니다. Bootstrap을 사용하는 것이 좋습니다.
_form.html.erb.tt:
<%%= form_with(model: <%= model_resource_name %>) do |form| %>
<%% if <%= singular_table_name %>.errors.any? %>
<div id="error_explanation">
<h2><%%= pluralize(<%= singular_table_name %>.errors.count, "error") %> prohibited this <%= singular_table_name %> from being saved:</h2>
<ul>
<%% <%= singular_table_name %>.errors.each do |error| %>
<li><%%= error.full_message %></li>
<%% end %>
</ul>
</div>
<%% end %>
<% attributes.each do |attribute| -%>
<div class="form-group mb-3">
<% if attribute.password_digest? -%>
<%%= form.label :password, class: "form-label" %>
<%%= form.password_field :password, class:"form-control" %>
</div>
<div class="form-group mb-3">
<%%= form.label :password_confirmation, class: "form-label" %>
<%%= form.password_field :password_confirmation, class:"form-control" %>
<% elsif attribute.attachments? -%>
<%%= form.label :<%= attribute.column_name %>, class: "form-label" %>
<%%= form.<%= attribute.field_type %> :<%= attribute.column_name %>, multiple: true %>
<% elsif attribute.type == :boolean -%>
<%%= form.label :<%= attribute.column_name %>, class: "form-check-label" %>
<%%= form.<%= attribute.field_type %> :<%= attribute.column_name %>, class:"form-check-input" %>
<% elsif attribute.reference? -%>
<%%= form.label :<%= attribute.column_name %> %>
<%%= form.collection_select :<%= attribute.column_name %>, <%= attribute.name.camelize %>.all, :id, :name, { prompt: true }, { class: "form-select" } %>
<% else -%>
<%%= form.label :<%= attribute.column_name %>, class: "form-label" %>
<%%= form.<%= attribute.field_type %> :<%= attribute.column_name %>, class:"form-control" %>
<% end -%>
</div>
<% end -%>
<div class="form-group mb-3">
<%%= form.submit class: 'btn btn-primary' %>
</div>
<%% end %>
edit.html.erb.tt:
<div class="container-fluid">
<h1>Editing <%= singular_table_name.titleize %></h1>
<%%= render 'form', <%= singular_table_name %>: @<%= singular_table_name %> %>
<%%= link_to 'Show', @<%= singular_table_name %>, class: "btn btn-light min-width-btn" %> |
<%%= link_to 'Back', <%= index_helper %>_path, class: "btn btn-light min-width-btn" %>
</div>
index.html.erb.tt:
<div class="container-fluid">
<p id="notice"><%%= notice %></p>
<h1><%= plural_table_name.titleize %></h1>
<table class="table">
<thead>
<tr>
<% attributes.reject(&:password_digest?).each do |attribute| -%>
<th><%= attribute.human_name %></th>
<% end -%>
<th colspan="3"></th>
</tr>
</thead>
<tbody>
<%% @<%= plural_table_name %>.each do |<%= singular_table_name %>| %>
<tr>
<% attributes.reject(&:password_digest?).each do |attribute| -%>
<td><%%= <%= singular_table_name %>.<%= attribute.column_name %> %></td>
<% end -%>
<td><%%= link_to 'Show', <%= model_resource_name %> %></td>
<td><%%= link_to 'Edit', edit_<%= singular_route_name %>_path(<%= singular_table_name %>) %></td>
<td><%%= link_to 'Destroy', <%= model_resource_name %>, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<%% end %>
</tbody>
</table>
<br />
<%%= link_to 'New <%= singular_table_name.titleize %>', new_<%= singular_route_name %>_path, class: "btn btn-success min-width-btn" %>
</div>
new.html.erb:
<div class="container-fluid">
<h1>New <%= singular_table_name.titleize %></h1>
<%%= render 'form', <%= singular_table_name %>: @<%= singular_table_name %> %>
<%%= link_to 'Back', <%= index_helper %>_path, class: "btn btn-light min-width-btn" %>
</div>
show.html.erb:
<div class="container-fluid">
<p id="notice"><%%= notice %></p>
<% attributes.reject(&:password_digest?).each do |attribute| -%>
<% if attribute.attachment? -%>
<div class="form-group mb-3">
<p><strong><%= attribute.human_name %>:</strong></p>
<%%= link_to @<%= singular_table_name %>.<%= attribute.column_name %>.filename, @<%= singular_table_name %>.<%= attribute.column_name %> if @<%= singular_table_name %>.<%= attribute.column_name %>.attached? %>
</div>
<% elsif attribute.attachments? -%>
<div class="form-group mb-3">
<p><strong><%= attribute.human_name %>:</strong></p>
<%% @<%= singular_table_name %>.<%= attribute.column_name %>.each do |<%= attribute.singular_name %>| %>
<div><%%= link_to <%= attribute.singular_name %>.filename, <%= attribute.singular_name %> %></div>
<%% end %>
</div>
<% else -%>
<div class="form-group mb-3">
<p><strong><%= attribute.human_name %>:</strong></p>
<div>
<%%= @<%= singular_table_name %>.<%= attribute.column_name %> %>
</div>
</div>
<% end -%>
<% end -%>
<%%= link_to 'Edit', edit_<%= singular_table_name %>_path(@<%= singular_table_name %>), class: "btn btn-primary min-width-btn" %>
<%%= link_to 'Back', <%= index_helper %>_path, class: "btn btn-light min-width-btn" %>
</div>
이제 이전 생성기로 만든 파일을 삭제하고 새 템플릿을 사용하여 생성해 보겠습니다.
$ rails d scaffold Post title:string description:text
$ rails g scaffold Post title:string description:text
결과:


Reference
이 문제에 관하여(Rails 스캐폴딩용 사용자 정의 템플릿), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/jetthoughts/custom-templates-for-rails-scaffolding-4ge0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)