[RUBY] J'ai essayé de personnaliser Slim avec Scaffold

Qu'est-ce que c'est

Aperçu

Lors de la personnalisation de l'échafaudage de rails, j'ai eu du mal avec la sortie en slim, donc la lutte pour le réaliser

Pour des gens comme ça

・ Les personnes qui utilisent un moteur de gabarit mince pour les rails Ou quiconque veut affiner le moteur de modèle de rails ・ Les personnes qui personnalisent l'échafaudage mais abandonnent la personnalisation de la vue Ou quelqu'un qui veut personnaliser l'échafaudage

environnement

Rails 6.0.2.2 ruby 2.6.5

Préparation à la mise en œuvre

Partie 1 Rendre le moteur de modèles plus mince

Reportez-vous à cet article et ajoutez une gemme appelée «slim-rails». https://qiita.com/ftyabu/items/42eb62901b6b56a7dc72

Partie 2 Rendre possible la personnalisation du modèle d'échafaudage

Reportez-vous à cet article pour créer un modèle et modifier sa référence. https://qiita.com/akito1986/items/d9f379191fd6b98de955

Étapes de réalisation

Partie 1 Changez le nom du répertoire d'erb en slim

Je pense que les fichiers suivants ont été créés dans la "Partie 2" ci-dessus. (Peut être différent selon les paramètres)

$ tree lib/templates
lib/templates
├── erb
│   ├── controller
│   │   ├── templates
│   │   │   └── view.html.erb
│   │   └── view.html.erb
│   ├── mailer
│   │   ├── templates
│   │   │   ├── view.html.erb
│   │   │   └── view.text.erb
│   │   ├── view.html.erb
│   │   └── view.text.erb
│   └── scaffold
│       ├── _form.html.erb
│       ├── edit.html.erb
│       ├── index.html.erb
│       ├── new.html.erb
│       ├── show.html.erb
│       └── templates
│           ├── _form.html.erb
│           ├── edit.html.erb
│           ├── index.html.erb
│           ├── new.html.erb
│           └── show.html.erb
└── rails
    ├── assets
    │   ├── javascript.js
    │   ├── stylesheet.css
    │   └── templates
    │       ├── javascript.js
    │       └── stylesheet.css
    ├── controller
    │   ├── controller.rb
    │   └── templates
    │       └── controller.rb
    ├── helper
    │   ├── helper.rb
    │   └── templates
    │       └── helper.rb
    └── scaffold_controller
        ├── api_controller.rb
        ├── controller.rb
        └── templates
            ├── api_controller.rb
            └── controller.rb

16 directories, 28 files

Changeons ce répertoire "erb" en "slim".

Partie 2 Réécrire le fichier des spécifications erb.tt vers les spécifications slim.tt

Eh bien, voici la production. J'ai cherché un article utile, mais je ne l'ai pas trouvé. Tout d'abord, jetons un œil au contenu du fichier cible

lib/templates/erb/scaffold/index.html.erb.tt

<p id="notice"><%%= notice %></p>

<h1><%= plural_table_name.titleize %></h1>

<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 %>

Je n'étais pas sûr du symbole <%% =, il est peut-être familier aux personnes qui utilisent erb régulièrement.

https://qiita.com/ykhirao/items/7ff9ce515a82a6dd24ea Cet article a présenté <%% =. Cela évite que le fichier erb ne soit corrompu même si le fichier erb est développé une fois.

Comment puis-je y parvenir avec Slim? ..

Partie 3 (Échec) Preuve de la théorie selon laquelle si vous essayez de frapper la gemme pour le moment

Je me suis soudainement souvenu ici. L'existence de ʻerb2 slim`.

Je l'ai essayé, croyant que "erb était écrit correctement et le réparerait". ..

lib/templates/erb/scaffold/index.html.slim

p#notice
  - %= notice
h1
  = plural_table_name.titleize
table
  thead
    tr
      - attributes.reject(&:password_digest?).each do |attribute|
        th
          = attribute.human_name
      th[colspan="3"]
  tbody
    |  <ruby code="% @
    = plural_table_name
    | .each do |
    = singular_table_name
    | | "> 
    tr
      - attributes.reject(&:password_digest?).each do |attribute|
        td
          - %= <%= singular_table_name
          | .
          = attribute.column_name
          |  %>
      td
        - %= link_to 'Show', <%= model_resource_name
        |  %>
      td
        - %= link_to 'Edit', edit_<%= singular_route_name
        | _path(
        = singular_table_name
        | ) %>
      td
        - %= link_to 'Destroy', <%= model_resource_name
        | , method: :delete, data: { confirm: 'Are you sure?' } %>
    - % end
br
- %= link_to 'New <%= singular_table_name.titleize
| ', new_
= singular_route_name
| _path %> 

Cela ne sent que l'effondrement. .. .. Lol Comme prévu, lorsque j'ai exécuté scaffold, c'était une série d'erreurs de syntaxe. Après tout, il semble plus sûr de le réparer vous-même

Partie 4 Obtenez des indices de slim-rails

Cependant, je voulais commencer avec quelque chose, et quand je faisais des recherches sur diverses choses, tout à coup "Les rails minces devraient jouer avec le gabarit d'échafaudage en premier lieu." J'avais une bonne idée, alors je l'ai vérifiée. Alors ... https://github.com/slim-template/slim-rails était.

slim-rails/lib/generators/slim/scaffold/templates/index.html.slim

h1 Listing <%= plural_table_name %>

table
  thead
    tr
<% attributes.each do |attribute| -%>
      th <%= attribute.human_name %>
<% end -%>
      th
      th
      th

  tbody
    - @<%= plural_table_name %>.each do |<%= singular_table_name %>|
      tr
<% attributes.each do |attribute| -%>
        td = <%= singular_table_name %>.<%= attribute.name %>
<% end -%>
        td = link_to 'Show', <%= singular_table_name %>
        td = link_to 'Edit', edit_<%= singular_table_name %>_path(<%= singular_table_name %>)
        td = link_to 'Destroy', <%= singular_table_name %>, data: { confirm: 'Are you sure?' }, method: :delete

br

= link_to 'New <%= human_name %>', new_<%= singular_table_name %>_path

En d'autres termes, vous pouvez vous y référer et modifier le modèle à votre guise. Si vous le trouvez, c'est celui-là. Veuillez vivre une merveilleuse vie personnalisée tout en changeant le libellé, en changeant la structure et en expérimentant avec diligence.

Conclusion

Code source en cas de problème Si je l'ai remarqué tôt, il a été résolu en un instant

Recommended Posts

J'ai essayé de personnaliser Slim avec Scaffold
J'ai essayé UPSERT avec PostgreSQL.
J'ai essayé BIND avec Docker
J'ai essayé d'utiliser JOOQ avec Gradle
J'ai essayé l'analyse morphologique avec MeCab
J'ai essayé d'interagir avec Java
J'ai essayé la communication UDP avec Java
J'ai essayé GraphQL avec Spring Boot
J'ai essayé Flyway avec Spring Boot
J'ai essayé d'utiliser Realm avec Swift UI
J'ai essayé de démarrer avec Web Assembly
J'ai essayé d'utiliser Scalar DL avec Docker
J'ai essayé d'utiliser OnlineConverter avec SpringBoot + JODConverter
J'ai essayé l'apprentissage de la gestion qui fait gagner du temps avec Studyplus.
J'ai essayé de jouer un peu avec BottomNavigationView ①
J'ai essayé d'utiliser OpenCV avec Java + Tomcat
J'ai essayé l'initialisation paresseuse avec Spring Boot 2.2.0
J'ai essayé Spring.
J'ai essayé de mettre Tomcat
J'ai essayé youtubeDataApi.
J'ai essayé de refactoriser ①
J'ai essayé JHipster 5.1
J'ai essayé de vérifier AdoptOpenJDK 11 (11.0.2) avec l'image Docker
J'ai essayé de faire une authentification de base avec Java
J'ai essayé de gérer la configuration des jambes de force avec Coggle
J'ai aussi essayé Web Assembly avec Nim et C
J'ai fait un blackjack avec Ruby (j'ai essayé d'utiliser minitest)
J'ai essayé de casser le bloc avec java (1)
J'ai essayé de démarrer avec Gradle sur Heroku
J'ai essayé ce que je voulais essayer avec Stream doucement.
[J'ai essayé] Tutoriel de printemps
J'ai essayé d'implémenter le téléchargement de fichiers avec Spring MVC
J'ai essayé de lire et de sortir CSV avec Outsystems
J'ai essayé d'implémenter TCP / IP + BIO avec JAVA
J'ai essayé d'exécuter Autoware
J'ai essayé d'utiliser Gson
[Java 11] J'ai essayé d'exécuter Java sans compiler avec javac
J'ai démarré MySQL 5.7 avec docker-compose et j'ai essayé de me connecter
J'ai essayé QUARKUS immédiatement
J'ai essayé d'utiliser TestNG
[Apprentissage automatique] J'ai essayé la détection d'objets avec Create ML [détection d'objets]
J'ai essayé Spring Batch
J'ai essayé d'utiliser Galasa
J'ai essayé de dessiner une animation avec l'API Blazor + canvas
J'ai essayé OCR de traiter un fichier PDF avec Java
J'ai essayé node-jt400 (Programmes)
J'ai essayé node-jt400 (exécuter)
J'ai essayé node-jt400 (Transactions)
J'ai essayé d'installer le plugin lié à Ruby on Rails avec vim-plug
J'ai essayé de créer un environnement de développement java8 avec Chocolatey
J'ai essayé de moderniser une application Java EE avec OpenShift.
J'ai essayé d'augmenter la vitesse de traitement avec l'ingénierie spirituelle
[Rails] J'ai essayé de créer une mini application avec FullCalendar
J'ai essayé le guide d'introduction de Spring Boot [Accès aux données avec JPA]
J'ai essayé le déploiement automatique avec CircleCI + Capistrano + AWS (EC2) + Rails