1 Mise à niveau vers Rails 4.2
Si vous mettez à niveau une application existante, il est conseillé d'avoir une bonne couverture de tests avant de commencer. Vous devriez également d'abord mettre à niveau vers Rails 4.1 au cas où vous ne l'auriez pas déjà fait et vous assurer que votre application fonctionne toujours comme prévu avant de tenter de passer à Rails 4.2. Une liste de points à surveiller lors de la mise à niveau est disponible dans le guide Mise à niveau de Ruby on Rails.
2 Fonctionnalités majeures
2.1 Active Job
Active Job est un nouveau framework dans Rails 4.2. Il s'agit d'une interface commune au-dessus des systèmes de mise en file d'attente tels que Resque, Delayed Job, Sidekiq, et plus encore.
Les jobs écrits avec l'API Active Job s'exécutent sur l'une des files d'attente prises en charge grâce à leurs adaptateurs respectifs. Active Job est préconfiguré avec un exécuteur en ligne qui exécute les jobs immédiatement.
Les jobs ont souvent besoin de prendre des objets Active Record en tant qu'arguments. Active Job passe les références d'objets sous forme d'URI (uniform resource identifiers) au lieu de sérialiser l'objet lui-même. La nouvelle bibliothèque Global ID construit des URIs et recherche les objets auxquels ils font référence. Le passage d'objets Active Record en tant qu'arguments de job fonctionne simplement en utilisant Global ID en interne.
Par exemple, si trashable
est un objet Active Record, alors ce job s'exécute
sans problème, sans aucune sérialisation :
class TrashableCleanupJob < ActiveJob::Base
def perform(trashable, depth)
trashable.cleanup(depth)
end
end
Consultez le guide Active Job Basics pour plus d'informations.
2.2 Mails asynchrones
En s'appuyant sur Active Job, Action Mailer est désormais livré avec une méthode deliver_later
qui envoie les e-mails via la file d'attente, de sorte qu'elle ne bloque pas le contrôleur ou le modèle si la file d'attente est asynchrone (la file d'attente en ligne par défaut bloque).
Il est toujours possible d'envoyer des e-mails immédiatement avec deliver_now
.
2.3 Adequate Record
Adequate Record est un ensemble d'améliorations de performance dans Active Record qui rendent les appels courants find
et find_by
ainsi que certaines requêtes d'association jusqu'à 2 fois plus rapides.
Cela fonctionne en mettant en cache les requêtes SQL courantes sous forme de déclarations préparées et en les réutilisant lors d'appels similaires, en sautant une grande partie du travail de génération de requête lors d'appels ultérieurs. Pour plus de détails, veuillez vous référer au billet de blog d'Aaron Patterson.
Active Record profitera automatiquement de cette fonctionnalité sur les opérations prises en charge sans aucune intervention de l'utilisateur ou de modifications de code. Voici quelques exemples d'opérations prises en charge :
Post.find(1) # Le premier appel génère et met en cache la déclaration préparée
Post.find(2) # Les appels suivants réutilisent la déclaration préparée mise en cache
Post.find_by_title('premier post')
Post.find_by_title('deuxième post')
Post.find_by(title: 'premier post')
Post.find_by(title: 'deuxième post')
post.comments
post.comments(true)
Il est important de souligner que, comme le suggèrent les exemples ci-dessus, les déclarations préparées ne mettent pas en cache les valeurs passées dans les appels de méthode ; elles contiennent plutôt des espaces réservés pour ces valeurs.
Le cache n'est pas utilisé dans les scénarios suivants :
- Le modèle a une portée par défaut.
- Le modèle utilise l'héritage de table unique.
- find
avec une liste d'identifiants, par exemple :
```ruby
# non mis en cache
Post.find(1, 2, 3)
Post.find([1,2])
```
find_by
avec des fragments SQL :Post.find_by('published_at < ?', 2.weeks.ago)
2.4 Console Web
Les nouvelles applications générées avec Rails 4.2 incluent désormais la gem Web Console par défaut. Web Console ajoute une console Ruby interactive sur chaque page d'erreur et fournit une vue et des helpers de contrôleur pour la console.
La console interactive sur les pages d'erreur vous permet d'exécuter du code dans le contexte
de l'endroit où l'exception s'est produite. L'helper console
, s'il est appelé
n'importe où dans une vue ou un contrôleur, lance une console interactive avec le contexte final,
une fois le rendu terminé.
2.5 Support des clés étrangères
Le DSL de migration prend désormais en charge l'ajout et la suppression de clés étrangères. Elles sont également incluses
dans schema.rb
. À l'heure actuelle, seuls les adaptateurs mysql
, mysql2
et postgresql
prennent en charge les clés étrangères.
# ajouter une clé étrangère à `articles.author_id` faisant référence à `authors.id`
add_foreign_key :articles, :authors
# ajouter une clé étrangère à `articles.author_id` faisant référence à `users.lng_id`
add_foreign_key :articles, :users, column: :author_id, primary_key: "lng_id"
# supprimer la clé étrangère sur `accounts.branch_id`
remove_foreign_key :accounts, :branches
# supprimer la clé étrangère sur `accounts.owner_id`
remove_foreign_key :accounts, column: :owner_id
Consultez la documentation de l'API sur add_foreign_key et remove_foreign_key pour une description complète.
3 Incompatibilités
Les fonctionnalités précédemment dépréciées ont été supprimées. Veuillez vous référer aux composants individuels pour les nouvelles dépréciations de cette version.
Les changements suivants peuvent nécessiter une action immédiate lors de la mise à niveau.
3.1 render
avec un argument de type String
Auparavant, l'appel à render "foo/bar"
dans une action de contrôleur était équivalent à
render file: "foo/bar"
. Dans Rails 4.2, cela a été modifié pour signifier
render template: "foo/bar"
. Si vous devez rendre un fichier, veuillez
modifier votre code pour utiliser la forme explicite (render file: "foo/bar"
) à la place.
3.2 respond_with
/ respond_to
au niveau de la classe
respond_with
et le respond_to
correspondant au niveau de la classe ont été déplacés
vers la gemme responders. Ajoutez
gem 'responders', '~> 2.0'
à votre Gemfile
pour l'utiliser :
# app/controllers/users_controller.rb
class UsersController < ApplicationController
respond_to :html, :json
def show
@user = User.find(params[:id])
respond_with @user
end
end
Le respond_to
au niveau de l'instance n'est pas affecté :
# app/controllers/users_controller.rb
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
respond_to do |format|
format.html
format.json { render json: @user }
end
end
end
3.3 Hôte par défaut pour rails server
En raison d'un changement dans Rack,
rails server
écoute désormais sur localhost
au lieu de 0.0.0.0
par défaut. Cela
devrait avoir un impact minimal sur le flux de travail de développement standard car à la fois
http://127.0.0.1:3000 et http://localhost:3000 continueront de fonctionner comme avant
sur votre propre machine.
Cependant, avec ce changement, vous ne pourrez plus accéder au serveur Rails
à partir d'une autre machine, par exemple si votre environnement de développement
est dans une machine virtuelle et que vous souhaitez y accéder depuis la machine hôte.
Dans de tels cas, veuillez démarrer le serveur avec rails server -b 0.0.0.0
pour
restaurer l'ancien comportement.
Si vous faites cela, assurez-vous de configurer correctement votre pare-feu de sorte que seules les machines de confiance de votre réseau puissent accéder à votre serveur de développement.
3.4 Symboles d'options de statut modifiés pour render
En raison d'un changement dans Rack, les symboles acceptés par la méthode render
pour l'option :status
ont été modifiés :
- 306 :
:reserved
a été supprimé. - 413 :
:request_entity_too_large
a été renommé en:payload_too_large
. - 414 :
:request_uri_too_long
a été renommé en:uri_too_long
. - 416 :
:requested_range_not_satisfiable
a été renommé en:range_not_satisfiable
.
Gardez à l'esprit que si vous appelez render
avec un symbole inconnu, le statut de la réponse sera par défaut 500.
3.5 Sanitiseur HTML
Le sanitiseur HTML a été remplacé par une nouvelle implémentation plus robuste basée sur Loofah et Nokogiri. Le nouveau sanitiseur est plus sécurisé et sa fonction de sanitisation est plus puissante et flexible.
En raison du nouvel algorithme, la sortie sanitisée peut être différente pour certaines entrées pathologiques.
Si vous avez besoin de la sortie exacte de l'ancien sanitiseur, vous pouvez ajouter la gemme rails-deprecated_sanitizer au Gemfile
pour obtenir le comportement précédent. La gemme ne génère pas de messages de dépréciation car elle est facultative.
rails-deprecated_sanitizer
sera pris en charge uniquement pour Rails 4.2 ; elle ne sera pas maintenue pour Rails 5.0.
Consultez cet article de blog pour plus de détails sur les changements apportés au nouveau sanitiseur.
3.6 assert_select
assert_select
est maintenant basé sur Nokogiri. Par conséquent, certains sélecteurs précédemment valides ne sont plus pris en charge. Si votre application utilise l'une de ces orthographes, vous devrez les mettre à jour :
Les valeurs dans les sélecteurs d'attributs peuvent nécessiter des guillemets s'ils contiennent des caractères non alphanumériques.
# avant a[href=/] a[href$=/] # maintenant a[href="/"] a[href$="/"]
Les DOM construits à partir de sources HTML contenant du HTML invalide avec des éléments mal imbriqués peuvent différer.
Par exemple :
# contenu : <div><i><p></i></div> # avant : assert_select('div > i') # => true assert_select('div > p') # => false assert_select('i > p') # => true # maintenant : assert_select('div > i') # => true assert_select('div > p') # => true assert_select('i > p') # => false
Si les données sélectionnées contiennent des entités, la valeur sélectionnée pour la comparaison était brute (par exemple
AT&T
), et maintenant elle est évaluée (par exempleAT&T
).# contenu : <p>AT&T</p> # avant : assert_select('p', 'AT&T') # => true assert_select('p', 'AT&T') # => false # maintenant : assert_select('p', 'AT&T') # => true assert_select('p', 'AT&T') # => false
De plus, les substitutions ont changé de syntaxe.
Maintenant, vous devez utiliser un sélecteur :match
similaire à CSS :
assert_select ":match('id', ?)", 'comment_1'
De plus, les substitutions Regexp ont une apparence différente lorsque l'assertion échoue. Remarquez comment /hello/
ici :
assert_select(":match('id', ?)", /hello/)
devient "(?-mix:hello)"
:
Expected at least 1 element matching "div:match('id', "(?-mix:hello)")", found 0..
Expected 0 to be >= 1.
Consultez la documentation de Rails Dom Testing pour en savoir plus sur assert_select
.
4 Railties
Veuillez vous référer au [journal des modifications][railties] pour des détails sur les changements.
4.1 Suppressions
L'option
--skip-action-view
a été supprimée du générateur d'applications. (Pull Request)La commande
rails application
a été supprimée sans remplacement. (Pull Request)
4.2 Dépréciations
Dépréciation de l'absence de
config.log_level
pour les environnements de production. (Pull Request)Dépréciation de
rake test:all
au profit derake test
, car il exécute maintenant tous les tests du dossiertest
. (Pull Request)Déprécié
rake test:all:db
au profit derake test:db
. (Pull Request)Déprécié
Rails::Rack::LogTailer
sans remplacement. (Commit)
4.3 Changements notables
Introduit
web-console
dans leGemfile
de l'application par défaut. (Pull Request)Ajouté une option
required
au générateur de modèle pour les associations. (Pull Request)Introduit l'espace de noms
x
pour définir des options de configuration personnalisées :# config/environments/production.rb config.x.payment_processing.schedule = :daily config.x.payment_processing.retries = 3 config.x.super_debugger = true
Ces options sont ensuite disponibles via l'objet de configuration :
Rails.configuration.x.payment_processing.schedule # => :daily Rails.configuration.x.payment_processing.retries # => 3 Rails.configuration.x.super_debugger # => true
(Commit)
Introduit
Rails::Application.config_for
pour charger une configuration pour l'environnement actuel.# config/exception_notification.yml production: url: http://127.0.0.1:8080 namespace: my_app_production development: url: http://localhost:3001 namespace: my_app_development
# config/environments/production.rb Rails.application.configure do config.middleware.use ExceptionNotifier, config_for(:exception_notification) end
Introduit une option
--skip-turbolinks
dans le générateur d'application pour ne pas générer l'intégration de turbolinks. (Commit)Introduit un script
bin/setup
en tant que convention pour le code de configuration automatisé lors de la création d'une application. (Pull Request)Changé la valeur par défaut de
config.assets.digest
àtrue
en développement. (Pull Request)Introduit une API pour enregistrer de nouvelles extensions pour
rake notes
. (Pull Request)Introduit un rappel
after_bundle
à utiliser dans les modèles Rails. (Pull Request)Introduit
Rails.gem_version
en tant que méthode pratique pour retournerGem::Version.new(Rails.version)
. (Pull Request)
5 Action Pack
Veuillez vous référer au [Changelog][action-pack] pour les changements détaillés.
5.1 Suppressions
respond_with
etrespond_to
au niveau de la classe ont été supprimés de Rails et déplacés vers le gemresponders
(version 2.0). Ajoutezgem 'responders', '~> 2.0'
à votreGemfile
pour continuer à utiliser ces fonctionnalités. (Pull Request, Plus de détails)Supprimé
AbstractController::Helpers::ClassMethods::MissingHelperError
déprécié au profit deAbstractController::Helpers::MissingHelperError
. (Commit)
5.2 Dépréciations
Dépréciée l'option
only_path
sur les helpers*_path
. (Commit)Déprécié
assert_tag
,assert_no_tag
,find_tag
etfind_all_tag
au profit deassert_select
. (Commit)Déprécié la prise en charge du réglage de l'option
:to
d'un routeur à un symbole ou une chaîne de caractères qui ne contient pas le caractère "#":get '/posts', to: MyRackApp => (Aucun changement nécessaire) get '/posts', to: 'post#index' => (Aucun changement nécessaire) get '/posts', to: 'posts' => get '/posts', controller: :posts get '/posts', to: :index => get '/posts', action: :index
(Commit)
Dépréciée la prise en charge des clés de chaîne dans les helpers d'URL :
# mauvais root_path('controller' => 'posts', 'action' => 'index') # bon root_path(controller: 'posts', action: 'index')
5.3 Changements notables
La famille de méthodes
*_filter
a été supprimée de la documentation. Leur utilisation est déconseillée au profit de la famille de méthodes*_action
:after_filter => after_action append_after_filter => append_after_action append_around_filter => append_around_action append_before_filter => append_before_action around_filter => around_action before_filter => before_action prepend_after_filter => prepend_after_action prepend_around_filter => prepend_around_action prepend_before_filter => prepend_before_action skip_after_filter => skip_after_action skip_around_filter => skip_around_action skip_before_filter => skip_before_action skip_filter => skip_action_callback
Si votre application dépend actuellement de ces méthodes, vous devriez utiliser les méthodes de remplacement
*_action
à la place. Ces méthodes seront dépréciées à l'avenir et seront finalement supprimées de Rails.render nothing: true
ou le rendu d'un corpsnil
n'ajoute plus un seul espace de remplissage au corps de la réponse. (Pull Request)Rails inclut maintenant automatiquement le digest du template dans les ETags. (Pull Request)
Les segments passés aux helpers d'URL sont maintenant automatiquement échappés. (Commit)
Introduction de l'option
always_permitted_parameters
pour configurer les paramètres autorisés globalement. La valeur par défaut de cette configuration est['controller', 'action']
. (Pull Request)Ajout de la méthode HTTP
MKCALENDAR
de RFC 4791. (Pull Request)Les notifications
*_fragment.action_controller
incluent maintenant le nom du contrôleur et de l'action dans la charge utile. (Pull Request)Amélioration de la page d'erreur de routage avec une recherche floue pour les routes. (Pull Request)
Ajout d'une option pour désactiver l'enregistrement des échecs de CSRF. (Pull Request)
Lorsque le serveur Rails est configuré pour servir des ressources statiques, les ressources gzip seront maintenant servies si le client le supporte et qu'un fichier gzip pré-généré (
.gz
) est présent sur le disque. Par défaut, le pipeline des ressources génère des fichiers.gz
pour toutes les ressources compressibles. Le fait de servir des fichiers gzip réduit le transfert de données et accélère les requêtes de ressources. Utilisez toujours un CDN si vous servez des ressources depuis votre serveur Rails en production. (Pull Request)Lors de l'appel des helpers
process
dans un test d'intégration, le chemin doit avoir une barre oblique initiale. Auparavant, vous pouviez l'omettre, mais c'était un sous-produit de l'implémentation et non une fonctionnalité intentionnelle, par exemple :test "list all posts" do get "/posts" assert_response :success end
6 Action View
Veuillez vous référer au [journal des modifications][action-view] pour des changements détaillés.
6.1 Dépréciations
Dépréciation de
AbstractController::Base.parent_prefixes
. Remplacez-le parAbstractController::Base.local_prefixes
lorsque vous souhaitez modifier l'emplacement des vues. (Pull Request)Dépréciation de
ActionView::Digestor#digest(name, format, finder, options = {})
. Les arguments doivent être passés sous forme de hash. (Pull Request)
6.2 Changements notables
render "foo/bar"
se développe maintenant enrender template: "foo/bar"
au lieu derender file: "foo/bar"
. (Pull Request)Les helpers de formulaire ne génèrent plus un élément
<div>
avec du CSS en ligne autour des champs masqués. (Pull Request)Introduction de la variable locale spéciale
#{partial_name}_iteration
à utiliser avec les partiels rendus avec une collection. Elle permet d'accéder à l'état actuel de l'itération via les méthodesindex
,size
,first?
etlast?
. (Pull Request)Les traductions de l'attribut de substitution suivent la même convention que les traductions de
label
. (Pull Request)
7 Action Mailer
Veuillez vous référer au [journal des modifications][action-mailer] pour des changements détaillés.
7.1 Dépréciations
Dépréciation des helpers
*_path
dans les mailers. Utilisez toujours les helpers*_url
à la place. (Pull Request)Dépréciation de
deliver
/deliver!
au profit dedeliver_now
/deliver_now!
. (Pull Request)
7.2 Changements notables
link_to
eturl_for
génèrent maintenant des URLs absolues par défaut dans les templates, il n'est plus nécessaire de passeronly_path: false
. (Commit)Introduction de
deliver_later
qui met en file d'attente une tâche dans la file d'attente de l'application pour envoyer des emails de manière asynchrone. (Pull Request)Ajout de l'option de configuration
show_previews
pour activer les aperçus des mailers en dehors de l'environnement de développement. (Pull Request)
8 Active Record
Veuillez vous référer au [journal des modifications][active-record] pour des changements détaillés.
8.1 Suppressions
Suppression de
cache_attributes
et des fonctions associées. Tous les attributs sont mis en cache. (Pull Request)Suppression de la méthode dépréciée
ActiveRecord::Base.quoted_locking_column
. (Pull Request)Suppression de
ActiveRecord::Migrator.proper_table_name
déprécié. Utilisez la méthode d'instanceproper_table_name
surActiveRecord::Migration
à la place. (Pull Request)Suppression du type
:timestamp
inutilisé. Il est maintenant automatiquement aliasé en:datetime
dans tous les cas. Cela corrige les incohérences lorsque les types de colonnes sont envoyés en dehors d'Active Record, par exemple pour la sérialisation XML. (Pull Request)Dépréciations
Dépréciation de la suppression des erreurs à l'intérieur de
after_commit
etafter_rollback
. (Pull Request)Dépréciation du support cassé pour la détection automatique des caches de compteur sur les associations
has_many :through
. Vous devriez plutôt spécifier manuellement le cache de compteur sur les associationshas_many
etbelongs_to
pour les enregistrements intermédiaires. (Pull Request)Dépréciation du passage d'objets Active Record à
.find
ou.exists?
. Appelezid
sur les objets en premier. (Commit 1, 2)Dépréciation du support inachevé pour les valeurs de plage PostgreSQL avec exclusion des débuts. Nous mappions actuellement les plages PostgreSQL sur des plages Ruby. Cette conversion n'est pas entièrement possible car les plages Ruby ne prennent pas en charge les débuts exclus.
La solution actuelle d'incrémenter le début n'est pas correcte et est maintenant dépréciée. Pour les sous-types où nous ne savons pas comment incrémenter (par exemple,
succ
n'est pas défini), cela lèvera uneArgumentError
pour les plages avec des débuts exclus. (Commit)Dépréciation de l'appel à
DatabaseTasks.load_schema
sans connexion. Utilisez plutôtDatabaseTasks.load_schema_current
. (Commit)Dépréciation de
sanitize_sql_hash_for_conditions
sans remplacement. Utiliser uneRelation
pour effectuer des requêtes et des mises à jour est l'API préférée. (Commit)Dépréciation de
add_timestamps
ett.timestamps
sans passer l'option:null
. La valeur par défaut denull: true
changera dans Rails 5 pournull: false
. (Pull Request)Dépréciation de
Reflection#source_macro
sans remplacement car il n'est plus nécessaire dans Active Record. (Pull Request)Dépréciation de
serialized_attributes
sans remplacement. (Pull Request)Dépréciation du retour de
nil
depuiscolumn_for_attribute
lorsque aucune colonne n'existe. Il renverra un objet nul dans Rails 5.0. (Pull Request)Dépréciation de l'utilisation de
.joins
,.preload
et.eager_load
avec des associations qui dépendent de l'état de l'instance (c'est-à-dire celles définies avec une portée qui prend un argument) sans remplacement. (Commit)
8.2 Changements notables
SchemaDumper
utiliseforce: :cascade
surcreate_table
. Cela permet de recharger un schéma lorsque des clés étrangères sont en place.Ajout d'une option
:required
aux associations singulières, qui définit une validation de présence sur l'association. (Pull Request)ActiveRecord::Dirty
détecte maintenant les modifications en place des valeurs mutables. Les attributs sérialisés sur les modèles Active Record ne sont plus enregistrés lorsque inchangés. Cela fonctionne également avec d'autres types tels que les colonnes de chaîne et les colonnes json sur PostgreSQL. (Pull Requests 1, 2, 3)Introduction de la tâche Rake
db:purge
pour vider la base de données de l' environnement actuel. (Commit)Introduction de
ActiveRecord::Base#validate!
qui lèveActiveRecord::RecordInvalid
si l'enregistrement est invalide. (Pull Request)Introduction de
validate
comme alias devalid?
. (Pull Request)touch
accepte maintenant plusieurs attributs à toucher en une seule fois. (Pull Request)L'adaptateur PostgreSQL prend désormais en charge le type de données
jsonb
dans PostgreSQL 9.4+. (Pull Request)Les adaptateurs PostgreSQL et SQLite n'ajoutent plus une limite par défaut de 255 caractères sur les colonnes de chaîne. (Pull Request)
Ajout de la prise en charge du type de colonne
citext
dans l'adaptateur PostgreSQL. (Pull Request)Ajout de la prise en charge des types de plage créés par l'utilisateur dans l'adaptateur PostgreSQL. (Commit)
sqlite3:///some/path
se résout maintenant au chemin absolu du système/some/path
. Pour les chemins relatifs, utilisez plutôtsqlite3:some/path
. (Auparavant,sqlite3:///some/path
se résolvait au chemin relatifsome/path
. Ce comportement a été déprécié dans Rails 4.1). (Pull Request)Ajout de la prise en charge des secondes fractionnaires pour MySQL 5.6 et supérieur. (Pull Request 1, 2)
Ajout de
ActiveRecord::Base#pretty_print
pour afficher joliment les modèles. (Demande de tirage)ActiveRecord::Base#reload
se comporte désormais de la même manière quem = Model.find(m.id)
, ce qui signifie qu'il ne conserve plus les attributs supplémentaires desSELECT
personnalisés. (Demande de tirage)ActiveRecord::Base#reflections
renvoie maintenant un hash avec des clés de chaîne au lieu de clés de symbole. (Demande de tirage)La méthode
references
dans les migrations prend désormais en charge une optiontype
pour spécifier le type de la clé étrangère (par exemple,:uuid
). (Demande de tirage)
9 Active Model
Veuillez vous référer au [journal des modifications][active-model] pour des changements détaillés.
9.1 Suppressions
- Suppression de
Validator#setup
obsolète sans remplacement. (Demande de tirage)
9.2 Obsolescence
reset_#{attribute}
est obsolète au profit derestore_#{attribute}
. (Demande de tirage)ActiveModel::Dirty#reset_changes
est obsolète au profit declear_changes_information
. (Demande de tirage)
9.3 Changements notables
Introduction de
validate
en tant qu'alias devalid?
. (Demande de tirage)Introduction de la méthode
restore_attributes
dansActiveModel::Dirty
pour restaurer les attributs modifiés (sales) à leurs valeurs précédentes. (Demande de tirage 1, 2)has_secure_password
n'interdit plus les mots de passe vides (c'est-à-dire les mots de passe qui ne contiennent que des espaces) par défaut. (Demande de tirage)has_secure_password
vérifie désormais que le mot de passe donné a moins de 72 caractères si les validations sont activées. (Demande de tirage)
10 Active Support
Veuillez vous référer au journal des modifications pour des changements détaillés.
10.1 Suppressions
Suppression de
Numeric#ago
,Numeric#until
,Numeric#since
,Numeric#from_now
obsolètes. (Commit)Suppression des terminaisons basées sur des chaînes obsolètes pour
ActiveSupport::Callbacks
. (Demande de tirage)
10.2 Obsolescence
Kernel#silence_stderr
,Kernel#capture
etKernel#quietly
sont obsolètes sans remplacement. (Demande de tirage)Class#superclass_delegating_accessor
est obsolète, utilisezClass#class_attribute
à la place. (Demande de tirage)ActiveSupport::SafeBuffer#prepend!
est obsolète carActiveSupport::SafeBuffer#prepend
effectue désormais la même fonction. (Demande de tirage)
10.3 Changements notables
Introduction d'une nouvelle option de configuration
active_support.test_order
pour spécifier l'ordre d'exécution des cas de test. Cette option est actuellement définie par défaut sur:sorted
, mais sera modifiée en:random
dans Rails 5.0. (Commit)Object#try
etObject#try!
peuvent désormais être utilisés sans un récepteur explicite dans le bloc. (Commit, Demande de tirage)L'assistant de test
travel_to
tronque désormais la composanteusec
à 0. (Commit)Introduction de
Object#itself
en tant que fonction d'identité. (Commit 1, 2)Object#with_options
peut désormais être utilisé sans un récepteur explicite dans le bloc. (Demande de tirage)Introduction de
String#truncate_words
pour tronquer une chaîne par un certain nombre de mots. (Demande de tirage)Ajout de
Hash#transform_values
etHash#transform_values!
pour simplifier un modèle courant où les valeurs d'un hash doivent changer, mais les clés restent les mêmes. (Demande de tirage)L'assistant d'inflection
humanize
supprime désormais tous les tirets bas initiaux. (Commit)Introduction de
Concern#class_methods
en tant qu'alternative àmodule ClassMethods
, ainsi queKernel#concern
pour éviter le boilerplatemodule Foo; extend ActiveSupport::Concern; end
. (Commit)Nouveau guide sur le chargement automatique et le rechargement des constantes.
11 Crédits
Consultez la liste complète des contributeurs à Rails pour les nombreuses personnes qui ont passé de nombreuses heures à faire de Rails le framework stable et robuste qu'il est aujourd'hui. Félicitations à tous.
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.