Après avoir appris l'existence de Gem et Trailblazer, qui fournissent une couche abstraite, j'ai essayé Create. Le contour de Trailblazer est expliqué dans d'autres articles de manière facile à comprendre, je vais donc l'omettre.
Cet article était très facile à comprendre. Présentation de TrailBlazer j'ai essayé de résumer
ruby '2.7.2' 'rails', '~> 6.0.3' template engine: haml
Create
.
└── todo
├── cell
│ ├── index.rb
│ └── new.rb
├── contract
│ └── form.rb
├── operation
│ ├── create.rb
│ └── index.rb
└── view
├── form.haml
├── index.haml
└── new.haml
Operation
module Todo::Operation
class Create < Trailblazer::Operation
class Present < Trailblazer::Operation
step Model(Todo, :new)
step Contract::Build( constant: Todo::Contract::Form )
end
step Subprocess(Present) #présenter l'appel de l'étape de classe
step Contract::Validate(key: :todo) #Validation par contrat
step Contract::Persist() #Enregistrer dans le modèle
end
end
Contract
module Todo::Contract
class Form < Reform::Form
include Reform::Form::ActiveModel
property :title
property :description
property :completed
validates :title, presence: true
validates :description, length: { minimum: 2 }
#Vous pouvez également remplacer
# def title
# super.capitalize
# end
end
end
Cell
module Todo::Cell
class New < Trailblazer::Cell
include ActionView::RecordIdentifier
include ActionView::Helpers::FormOptionsHelper
include SimpleForm::ActionViewExtensions::FormHelper
end
end
View
= simple_form_for(model, html: {novalidate: true}) do |f|
= f.input :title, placeholder: "Title"
%br
= f.input :description, as: :text, placeholder: "Description"
%br
= f.submit 'Submit'
= link_to 'Back', todos_path
[Projet] J'ai essayé cette fois (https://github.com/izumiiii/trail-todo)
Résumé de la présentation de TrailBlazer trailblazer
Recommended Posts