1 Utilisation
Pour appliquer un modèle, vous devez fournir au générateur Rails l'emplacement du modèle que vous souhaitez appliquer en utilisant l'option -m
. Il peut s'agir soit d'un chemin vers un fichier, soit d'une URL.
$ rails new blog -m ~/template.rb
$ rails new blog -m http://example.com/template.rb
Vous pouvez utiliser la commande app:template
de Rails pour appliquer des modèles à une application Rails existante. L'emplacement du modèle doit être passé via la variable d'environnement LOCATION. Encore une fois, il peut s'agir soit d'un chemin vers un fichier, soit d'une URL.
$ bin/rails app:template LOCATION=~/template.rb
$ bin/rails app:template LOCATION=http://example.com/template.rb
2 API de modèle
L'API de modèles Rails est facile à comprendre. Voici un exemple d'un modèle Rails typique :
# template.rb
generate(:scaffold, "person name:string")
route "root to: 'people#index'"
rails_command("db:migrate")
after_bundle do
git :init
git add: "."
git commit: %Q{ -m 'Initial commit' }
end
Les sections suivantes décrivent les principales méthodes fournies par l'API :
2.1 gem(*args)
Ajoute une entrée gem
pour la gem fournie au Gemfile
de l'application générée.
Par exemple, si votre application dépend des gems bj
et nokogiri
:
gem "bj"
gem "nokogiri"
Notez que cette méthode ajoute uniquement la gem au Gemfile
; elle n'installe pas la gem.
2.2 gem_group(*names, &block)
Enveloppe les entrées de gem dans un groupe.
Par exemple, si vous voulez charger rspec-rails
uniquement dans les groupes development
et test
:
gem_group :development, :test do
gem "rspec-rails"
end
2.3 add_source(source, options={}, &block)
Ajoute la source donnée au Gemfile
de l'application générée.
Par exemple, si vous avez besoin de sourcer une gem depuis "http://gems.github.com"
:
add_source "http://gems.github.com"
Si un bloc est donné, les entrées de gem dans le bloc sont enveloppées dans le groupe de source.
add_source "http://gems.github.com/" do
gem "rspec-rails"
end
2.4 environment/application(data=nil, options={}, &block)
Ajoute une ligne à l'intérieur de la classe Application
pour config/application.rb
.
Si options[:env]
est spécifié, la ligne est ajoutée au fichier correspondant dans config/environments
.
environment 'config.action_mailer.default_url_options = {host: "http://yourwebsite.example.com"}', env: 'production'
Un bloc peut être utilisé à la place de l'argument data
.
2.5 vendor/lib/file/initializer(filename, data = nil, &block)
Ajoute un initializer au répertoire config/initializers
de l'application générée.
Disons que vous aimez utiliser Object#not_nil?
et Object#not_blank?
:
initializer 'bloatlol.rb', <<-CODE
class Object
def not_nil?
!nil?
end
def not_blank?
!blank?
end
end
CODE
De même, lib()
crée un fichier dans le répertoire lib/
et vendor()
crée un fichier dans le répertoire vendor/
.
Il y a même file()
, qui accepte un chemin relatif à partir de Rails.root
et crée tous les répertoires/fichiers nécessaires :
file 'app/components/foo.rb', <<-CODE
class Foo
end
CODE
Cela créera le répertoire app/components
et y placera foo.rb
.
2.6 rakefile(filename, data = nil, &block)
Crée un nouveau fichier rake sous lib/tasks
avec les tâches fournies :
rakefile("bootstrap.rake") do
<<-TASK
namespace :boot do
task :strap do
puts "i like boots!"
end
end
TASK
end
Le code ci-dessus crée lib/tasks/bootstrap.rake
avec une tâche rake boot:strap
.
2.7 generate(what, *args)
Exécute le générateur Rails fourni avec les arguments donnés.
generate(:scaffold, "person", "name:string", "address:text", "age:number")
2.8 run(command)
Exécute une commande arbitraire. Tout comme les backticks. Disons que vous voulez supprimer le fichier README.rdoc
:
run "rm README.rdoc"
2.9 rails_command(command, options = {})
Exécute la commande fournie dans l'application Rails. Disons que vous voulez migrer la base de données :
rails_command "db:migrate"
Vous pouvez également exécuter des commandes avec un environnement Rails différent :
rails_command "db:migrate", env: 'production'
Vous pouvez également exécuter des commandes en tant que super-utilisateur :
rails_command "log:clear", sudo: true
Vous pouvez également exécuter des commandes qui doivent interrompre la génération de l'application en cas d'échec :
rails_command "db:migrate", abort_on_failure: true
2.10 route(routing_code)
Ajoute une entrée de routage au fichier config/routes.rb
. Dans les étapes ci-dessus, nous avons généré un scaffold pour une personne et supprimé README.rdoc
. Maintenant, pour faire de PeopleController#index
la page par défaut de l'application :
route "root to: 'person#index'"
2.11 inside(dir)
Vous permet d'exécuter une commande depuis le répertoire donné. Par exemple, si vous avez une copie de Rails edge que vous souhaitez lier symboliquement à partir de vos nouvelles applications, vous pouvez faire ceci :
ruby
inside('vendor') do
run "ln -s ~/commit-rails/rails rails"
end
2.12 ask(question)
ask()
vous donne la possibilité d'obtenir des commentaires de l'utilisateur et de les utiliser dans vos modèles. Disons que vous voulez que l'utilisateur donne un nom à la nouvelle bibliothèque brillante que vous ajoutez :
lib_name = ask("Comment voulez-vous appeler la nouvelle bibliothèque brillante ?")
lib_name << ".rb" unless lib_name.index(".rb")
lib lib_name, <<-CODE
class Shiny
end
CODE
2.13 yes?(question) ou no?(question)
Ces méthodes vous permettent de poser des questions à partir de modèles et de décider du flux en fonction de la réponse de l'utilisateur. Disons que vous voulez demander à l'utilisateur d'exécuter des migrations :
rails_command("db:migrate") if yes?("Exécuter les migrations de la base de données ?")
# no?(question) agit exactement à l'opposé.
2.14 git(:command)
Les modèles Rails vous permettent d'exécuter n'importe quelle commande git :
git :init
git add: "."
git commit: "-a -m 'Commit initial'"
2.15 after_bundle(&block)
Enregistre un rappel à exécuter après que les gemmes aient été regroupées et que les binstubs aient été générés. Utile pour ajouter des fichiers générés au contrôle de version :
after_bundle do
git :init
git add: '.'
git commit: "-a -m 'Commit initial'"
end
Les rappels sont exécutés même si --skip-bundle
a été passé.
3 Utilisation avancée
Le modèle d'application est évalué dans le contexte d'une instance de Rails::Generators::AppGenerator
. Il utilise l'action apply
fournie par Thor.
Cela signifie que vous pouvez étendre et modifier l'instance pour répondre à vos besoins.
Par exemple, en écrivant la méthode source_paths
pour contenir l'emplacement de votre modèle. Maintenant, des méthodes comme copy_file
accepteront des chemins relatifs à l'emplacement de votre modèle.
def source_paths
[__dir__]
end
Retour d'information
Vous êtes encouragé à contribuer à l'amélioration de la qualité de ce guide.
Veuillez contribuer si vous trouvez des fautes de frappe ou des erreurs factuelles. Pour commencer, vous pouvez lire notre contribution à la documentation section.
Vous pouvez également trouver du contenu incomplet ou des informations qui ne sont pas à jour. Veuillez ajouter toute documentation manquante pour la version principale. Assurez-vous de vérifier Edge Guides d'abord pour vérifier si les problèmes ont déjà été résolus ou non sur la branche principale. Consultez les Directives des guides Ruby on Rails pour le style et les conventions.
Si pour une raison quelconque vous repérez quelque chose à corriger mais ne pouvez pas le faire vous-même, veuillez ouvrir un problème.
Et enfin, toute discussion concernant la documentation de Ruby on Rails est la bienvenue sur le Forum officiel de Ruby on Rails.