1 Mise à niveau vers Rails 5.0
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 passer à Rails 4.2 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 une mise à jour vers Rails 5.0. Une liste de choses à surveiller lors de la mise à niveau est disponible dans le guide Mise à niveau de Ruby on Rails.
2 Fonctionnalités majeures
2.1 Action Cable
Action Cable est un nouveau framework dans Rails 5. Il intègre de manière transparente les WebSockets avec le reste de votre application Rails.
Action Cable permet d'écrire des fonctionnalités en temps réel en Ruby dans le même style et la même forme que le reste de votre application Rails, tout en étant performant et scalable. C'est une offre complète qui fournit à la fois un framework JavaScript côté client et un framework Ruby côté serveur. Vous avez accès à votre modèle de domaine complet écrit avec Active Record ou votre ORM de choix.
Consultez le guide Présentation d'Action Cable pour plus d'informations.
2.2 Applications API
Rails peut maintenant être utilisé pour créer des applications API allégées. Cela est utile pour créer et servir des API similaires à celles de Twitter ou de l'API GitHub, qui peuvent être utilisées pour des applications publiques ainsi que pour des applications personnalisées.
Vous pouvez générer une nouvelle application Rails API en utilisant la commande :
$ rails new my_api --api
Cela fera trois choses principales :
- Configurer votre application pour démarrer avec un ensemble de middleware plus limité que d'habitude. Plus précisément, il n'inclura pas par défaut de middleware principalement utile pour les applications de navigateur (comme la prise en charge des cookies).
- Faire en sorte que
ApplicationController
hérite deActionController::API
au lieu deActionController::Base
. Comme pour le middleware, cela exclura tous les modules Action Controller qui fournissent des fonctionnalités principalement utilisées par les applications de navigateur. - Configurer les générateurs pour ignorer la génération de vues, d'aides et de ressources lors de la génération d'une nouvelle ressource.
L'application fournit une base pour les API, qui peuvent ensuite être configurées pour intégrer des fonctionnalités adaptées aux besoins de l'application.
Consultez le guide Utiliser Rails pour les applications API uniquement pour plus d'informations.
2.3 API des attributs Active Record
Définit un attribut avec un type sur un modèle. Il remplacera le type des attributs existants si nécessaire.
Cela permet de contrôler la façon dont les valeurs sont converties en SQL et vice versa lorsqu'elles sont assignées à un modèle.
Cela modifie également le comportement des valeurs passées à ActiveRecord::Base.where
, ce qui nous permet d'utiliser nos objets de domaine dans une grande partie d'Active Record, sans avoir à dépendre des détails de l'implémentation ou à utiliser des patchs.
Voici quelques choses que vous pouvez réaliser avec cela :
- Le type détecté par Active Record peut être remplacé.
- Une valeur par défaut peut également être fournie.
- Les attributs n'ont pas besoin d'être soutenus par une colonne de base de données.
# db/schema.rb
create_table :store_listings, force: true do |t|
t.decimal :price_in_cents
t.string :my_string, default: "original default"
end
# app/models/store_listing.rb
class StoreListing < ActiveRecord::Base
end
store_listing = StoreListing.new(price_in_cents: '10.1')
# avant
store_listing.price_in_cents # => BigDecimal.new(10.1)
StoreListing.new.my_string # => "original default"
class StoreListing < ActiveRecord::Base
attribute :price_in_cents, :integer # type personnalisé
attribute :my_string, :string, default: "new default" # valeur par défaut
attribute :my_default_proc, :datetime, default: -> { Time.now } # valeur par défaut
attribute :field_without_db_column, :integer, array: true
end
# après
store_listing.price_in_cents # => 10
StoreListing.new.my_string # => "new default"
StoreListing.new.my_default_proc # => 2015-05-30 11:04:48 -0600
model = StoreListing.new(field_without_db_column: ["1", "2", "3"])
model.attributes # => {field_without_db_column: [1, 2, 3]}
Création de types personnalisés:
Vous pouvez définir vos propres types personnalisés, tant qu'ils répondent
aux méthodes définies sur le type de valeur. La méthode deserialize
ou
cast
sera appelée sur votre objet de type, avec une entrée brute provenant de la
base de données ou de vos contrôleurs. Cela est utile, par exemple, lors de la conversion personnalisée,
comme les données Money.
Interrogation:
Lorsque ActiveRecord::Base.where
est appelé, il utilisera
le type défini par la classe modèle pour convertir la valeur en SQL,
en appelant serialize
sur votre objet de type.
Cela donne aux objets la capacité de spécifier comment convertir les valeurs lors de l'exécution de requêtes SQL.
Suivi des modifications:
Le type d'un attribut est autorisé à modifier la façon dont le suivi des modifications est effectué.
Consultez sa documentation pour plus de détails.
2.4 Test Runner
Un nouveau test runner a été introduit pour améliorer les capacités d'exécution des tests dans Rails.
Pour utiliser ce test runner, tapez simplement bin/rails test
.
Le Test Runner s'inspire de RSpec
, minitest-reporters
, maxitest
et d'autres.
Il inclut certaines de ces avancées notables :
- Exécute un seul test en utilisant le numéro de ligne du test.
- Exécute plusieurs tests en indiquant le numéro de ligne des tests.
- Amélioration des messages d'échec, qui facilitent également la réexécution des tests échoués.
- Arrêt rapide en utilisant l'option
-f
, pour arrêter immédiatement les tests en cas d'échec, au lieu d'attendre la fin de la suite. - Reporte la sortie des tests jusqu'à la fin de l'exécution complète des tests en utilisant l'option
-d
. - Affiche la trace complète des exceptions en utilisant l'option
-b
. - Intégration avec minitest pour permettre des options comme
-s
pour les données de test seed,-n
pour exécuter un test spécifique par nom,-v
pour une sortie verbeuse améliorée, etc. - Sortie colorée des tests.
3 Railties
Veuillez vous référer au Changelog pour des changements détaillés.
3.1 Suppressions
- Suppression de la prise en charge du débogueur, utilisez plutôt byebug.
debugger
n'est pas pris en charge par Ruby 2.2. (commit) Suppression des tâches obsolètes
test:all
ettest:all:db
. (commit)Suppression de
Rails::Rack::LogTailer
obsolète. (commit)Suppression de la constante
RAILS_CACHE
obsolète. (commit)Suppression de la configuration
serve_static_assets
obsolète. (commit)Suppression des tâches de documentation
doc:app
,doc:rails
etdoc:guides
. (commit)Suppression du middleware
Rack::ContentLength
de la pile par défaut. (Commit)
3.2 Dépréciations
config.static_cache_control
est déprécié au profit deconfig.public_file_server.headers
. (Pull Request)config.serve_static_files
est déprécié au profit deconfig.public_file_server.enabled
. (Pull Request)Les tâches de l'espace de noms
rails
sont dépréciées au profit de l'espace de nomsapp
. (par exemple, les tâchesrails:update
etrails:template
sont renomméesapp:update
etapp:template
.) (Pull Request)
3.3 Changements notables
Ajout de l'exécuteur de tests Rails
bin/rails test
. (Pull Request)Les nouvelles applications et plugins générés obtiennent un fichier
README.md
en Markdown. (commit, Pull Request)Ajout de la tâche
bin/rails restart
pour redémarrer votre application Rails en touchanttmp/restart.txt
. (Pull Request)Ajout de la tâche
bin/rails initializers
pour afficher tous les initializers définis dans l'ordre où ils sont invoqués par Rails. (Pull Request)Ajout de la tâche
bin/rails dev:cache
pour activer ou désactiver le cache en mode développement. (Pull Request)Ajout du script
bin/update
pour mettre à jour l'environnement de développement automatiquement. (Pull Request)Proxy des tâches Rake via
bin/rails
. (Pull Request, Pull Request)Les nouvelles applications sont générées avec le moniteur de système de fichiers événementiel activé sur Linux et macOS. Cette fonctionnalité peut être désactivée en passant
--skip-listen
au générateur. (commit, commit)Génération d'applications avec une option pour enregistrer les journaux sur STDOUT en production en utilisant la variable d'environnement
RAILS_LOG_TO_STDOUT
. (Pull Request)Activation de HSTS avec l'en-tête IncludeSubdomains pour les nouvelles applications. (Pull Request)
Le générateur d'application écrit un nouveau fichier
config/spring.rb
, qui indique à Spring de surveiller des fichiers communs supplémentaires. (commit)Ajout de
--skip-action-mailer
pour ignorer Action Mailer lors de la génération d'une nouvelle application. (Pull Request)Suppression du répertoire
tmp/sessions
et de la tâche rake de nettoyage associée. (Pull Request)Modification de
_form.html.erb
généré par le générateur de scaffold pour utiliser des variables locales. (Pull Request)Désactivation du chargement automatique des classes en environnement de production. (commit)
4 Action Pack
Veuillez vous référer au journal des modifications pour des détails sur les changements.
4.1 Suppressions
Suppression de
ActionDispatch::Request::Utils.deep_munge
. (commit)Suppression de
ActionController::HideActions
. (Pull Request)Suppression des méthodes de substitution
respond_to
etrespond_with
, cette fonctionnalité a été extraite dans la gemme responders. (commit)Suppression des fichiers d'assertion obsolètes. (commit)
Suppression de l'utilisation obsolète de clés de chaîne dans les aides d'URL. (commit)
Suppression de l'option obsolète
only_path
sur les aides*_path
. (commit)Suppression de l'option obsolète
NamedRouteCollection#helpers
. (commit)Suppression du support obsolète pour définir des routes avec l'option
:to
qui ne contient pas#
. (commit)Suppression de
ActionDispatch::Response#to_ary
obsolète. (commit)Suppression de
ActionDispatch::Request#deep_munge
obsolète. (commit)Suppression de
ActionDispatch::Http::Parameters#symbolized_path_parameters
obsolète. (commit)Suppression de l'option obsolète
use_route
dans les tests de contrôleur. (commit)Suppression de
assigns
etassert_template
. Les deux méthodes ont été extraites dans la gemme rails-controller-testing. (Pull Request)
4.2 Dépréciations
Dépréciation de tous les rappels
*_filter
au profit des rappels*_action
. (Pull Request)Dépréciation des méthodes de test d'intégration
*_via_redirect
. Utilisezfollow_redirect!
manuellement après l'appel de la requête pour le même comportement. (Pull Request)Dépréciation de
AbstractController#skip_action_callback
au profit de méthodes de saut de rappel individuelles. (Pull Request)Dépréciation de l'option
:nothing
pour la méthoderender
. (Pull Request)Dépréciation du passage du premier paramètre en tant que
Hash
et du code d'état par défaut pour la méthodehead
. (Pull Request)Dépréciation de l'utilisation de chaînes ou de symboles pour les noms de classe de middleware. Utilisez plutôt les noms de classe. (commit)
Dépréciation de l'accès aux types MIME via des constantes (par exemple,
Mime::HTML
). Utilisez l'opérateur de crochet avec un symbole à la place (par exemple,Mime[:html]
). (Pull Request)Dépréciation de
redirect_to :back
au profit deredirect_back
, qui accepte un argumentfallback_location
requis, éliminant ainsi la possibilité d'uneRedirectBackError
. (Pull Request)ActionDispatch::IntegrationTest
etActionController::TestCase
déprécient les arguments positionnels au profit des arguments nommés. (Pull Request)Dépréciation des paramètres de chemin
:controller
et:action
. (Pull Request)Dépréciation de la méthode env sur les instances de contrôleur. (commit)
ActionDispatch::ParamsParser
est déprécié et a été supprimé de la pile de middleware. Pour configurer les analyseurs de paramètres, utilisezActionDispatch::Request.parameter_parsers=
. (commit, commit)Changements notables
Ajout de
ActionController::Renderer
pour rendre des templates arbitraires en dehors des actions du contrôleur. (Demande d'extraction)Migration vers la syntaxe des arguments de mots-clés dans
ActionController::TestCase
et les méthodes de requête HTTP deActionDispatch::Integration
. (Demande d'extraction)Ajout de
http_cache_forever
à Action Controller, afin de pouvoir mettre en cache une réponse qui ne s'expire jamais. (Demande d'extraction)Fournir un accès plus convivial aux variantes de requête. (Demande d'extraction)
Pour les actions sans templates correspondants, rendre
head :no_content
au lieu de lever une erreur. (Demande d'extraction)Ajout de la possibilité de substituer le constructeur de formulaire par défaut pour un contrôleur. (Demande d'extraction)
Ajout de la prise en charge des applications API-only.
ActionController::API
est ajouté en remplacement deActionController::Base
pour ce type d'applications. (Demande d'extraction)ActionController::Parameters
n'hérite plus deHashWithIndifferentAccess
. (Demande d'extraction)Rendre plus facile l'activation de
config.force_ssl
etconfig.ssl_options
en les rendant moins dangereux à essayer et plus faciles à désactiver. (Demande d'extraction)Ajout de la possibilité de retourner des en-têtes arbitraires à
ActionDispatch::Static
. (Demande d'extraction)Modification de la valeur par défaut de préfixe de
protect_from_forgery
àfalse
. (commit)ActionController::TestCase
sera déplacé dans son propre gemme dans Rails 5.1. UtilisezActionDispatch::IntegrationTest
à la place. (commit)Rails génère des ETags faibles par défaut. (Demande d'extraction)
Les actions du contrôleur sans appel explicite à
render
et sans templates correspondants rendront implicitementhead :no_content
au lieu de lever une erreur. (Demande d'extraction 1, 2)Ajout d'une option pour les jetons CSRF par formulaire. (Demande d'extraction)
Ajout de l'encodage de la requête et de l'analyse de la réponse aux tests d'intégration. (Demande d'extraction)
Ajout de
ActionController#helpers
pour accéder au contexte de la vue au niveau du contrôleur. (Demande d'extraction)Les messages flash supprimés sont retirés avant d'être stockés dans la session. (Demande d'extraction)
Ajout de la prise en charge du passage d'une collection d'enregistrements à
fresh_when
etstale?
. (Demande d'extraction)ActionController::Live
est devenu unActiveSupport::Concern
. Cela signifie qu'il ne peut pas être simplement inclus dans d'autres modules sans les étendre avecActiveSupport::Concern
ouActionController::Live
n'aura pas d'effet en production. Certaines personnes peuvent également utiliser un autre module pour inclure un code de gestion des échecs d'authentificationWarden
/Devise
spécial car le middleware ne peut pas intercepter un:warden
lancé par un thread enfant, ce qui est le cas lors de l'utilisation deActionController::Live
. (Plus de détails dans ce problème)Introduire
Response#strong_etag=
et#weak_etag=
ainsi que des options analogues pourfresh_when
etstale?
. (Demande de tirage)
5 Action View
Veuillez vous référer au Changelog pour des changements détaillés.
5.1 Suppressions
Suppression de
AbstractController::Base::parent_prefixes
obsolète. (commit)Suppression de
ActionView::Helpers::RecordTagHelper
, cette fonctionnalité a été extraite dans le gemme record_tag_helper. (Demande de tirage)Suppression de l'option
:rescue_format
pour l'aidetranslate
car elle n'est plus prise en charge par I18n. (Demande de tirage)
5.2 Changements notables
Changement du gestionnaire de modèle par défaut de
ERB
àRaw
. (commit)Le rendu de collection peut mettre en cache et récupérer plusieurs partiels à la fois. (Demande de tirage, commit)
Ajout de la correspondance générique aux dépendances explicites. (Demande de tirage)
Faire de
disable_with
le comportement par défaut pour les balises de soumission. Désactive le bouton lors de la soumission pour éviter les soumissions multiples. (Demande de tirage)Le nom du modèle partiel n'a plus besoin d'être un identifiant Ruby valide. (commit)
L'aide
datetime_tag
génère maintenant une balise d'entrée avec le typedatetime-local
. (Demande de tirage)Autoriser les blocs lors du rendu avec l'aide
render partial:
. (Demande de tirage)
6 Action Mailer
Veuillez vous référer au Changelog pour des changements détaillés.
6.1 Suppressions
Suppression des aides
*_path
obsolètes dans les vues des emails. (commit)Suppression des méthodes
deliver
etdeliver!
obsolètes. (commit)
6.2 Changements notables
La recherche de modèle respecte désormais la langue par défaut et les fallbacks de I18n. (commit)
Ajout du suffixe
_mailer
aux mailers créés via le générateur, suivant la même convention de nommage utilisée dans les contrôleurs et les jobs. (Demande de tirage)Ajout de
assert_enqueued_emails
etassert_no_enqueued_emails
. (Demande de tirage)Ajout de la configuration
config.action_mailer.deliver_later_queue_name
pour définir le nom de la file d'attente du mailer. (Demande de tirage)Ajout de la prise en charge de la mise en cache de fragments dans les vues d'Action Mailer. Ajout de la nouvelle option de configuration
config.action_mailer.perform_caching
pour déterminer si vos modèles doivent effectuer une mise en cache ou non. (Demande de tirage)
7 Active Record
Veuillez vous référer au Changelog pour des changements détaillés.
7.1 Suppressions
Suppression du comportement obsolète permettant de passer des tableaux imbriqués en tant que valeurs de requête. (Demande de tirage)
Suppression de
ActiveRecord::Tasks::DatabaseTasks#load_schema
obsolète. Cette méthode a été remplacée parActiveRecord::Tasks::DatabaseTasks#load_schema_for
. (commit)Suppression de
serialized_attributes
obsolète. (commit)Suppression des caches automatiques obsolètes sur
has_many :through
. (commit)Suppression de
sanitize_sql_hash_for_conditions
obsolète. (commit)Suppression de
Reflection#source_macro
obsolète. (commit)Suppression de
symbolized_base_class
etsymbolized_sti_name
obsolètes. (commit)Suppression de
ActiveRecord::Base.disable_implicit_join_references=
. (commit)Suppression de l'accès obsolète à la spécification de connexion en utilisant un accesseur de chaîne. (commit)
Suppression du support obsolète pour le préchargement des associations dépendantes de l'instance. (commit)
Suppression du support obsolète pour les plages PostgreSQL avec des bornes inférieures exclusives. (commit)
Suppression de l'obsolescence lors de la modification d'une relation avec Arel mis en cache. Cela génère une erreur
ImmutableRelation
à la place. (commit)Suppression de
ActiveRecord::Serialization::XmlSerializer
du noyau. Cette fonctionnalité a été extraite dans le gemme activemodel-serializers-xml. (Pull Request)Suppression du support de l'adaptateur de base de données
mysql
obsolète du noyau. La plupart des utilisateurs devraient pouvoir utilisermysql2
. Il sera converti en un gemme séparé lorsque nous trouverons quelqu'un pour le maintenir. (Pull Request 1, Pull Request 2)Suppression du support pour le gemme
protected_attributes
. (commit)Suppression du support pour les versions de PostgreSQL inférieures à 9.1. (Pull Request)
Suppression du support pour le gemme
activerecord-deprecated_finders
. (commit)Suppression de la constante
ActiveRecord::ConnectionAdapters::Column::TRUE_VALUES
. (commit)
7.2 Obsolescences
Obsolescence du passage d'une classe en tant que valeur dans une requête. Les utilisateurs devraient passer des chaînes à la place. (Pull Request)
Obsolescence du retour de
false
comme moyen d'arrêter les chaînes de rappel d'Active Record. La méthode recommandée est dethrow(:abort)
. (Pull Request)Obsolescence de
ActiveRecord::Base.errors_in_transactional_callbacks=
. (commit)Obsolescence de l'utilisation de
Relation#uniq
, utiliserRelation#distinct
à la place. (commit)Obsolescence du type PostgreSQL
:point
au profit d'un nouveau qui renverra des objetsPoint
au lieu d'unArray
. (Pull Request)Obsolescence du rechargement forcé de l'association en passant un argument vrai à la méthode d'association. (Pull Request)
Obsolescence des clés pour les erreurs d'association
restrict_dependent_destroy
au profit de nouveaux noms de clés. (Pull Request)Synchronisation du comportement de
#tables
. (Pull Request)Obsolescence de
SchemaCache#tables
,SchemaCache#table_exists?
etSchemaCache#clear_table_cache!
au profit de leurs nouvelles sources de données homologues. (Pull Request)Obsolète
connection.tables
sur les adaptateurs SQLite3 et MySQL. (Pull Request)Obsolète le passage d'arguments à
#tables
- la méthode#tables
de certains adaptateurs (mysql2, sqlite3) renverrait à la fois des tables et des vues tandis que d'autres (postgresql) ne renvoient que des tables. Pour rendre leur comportement cohérent,#tables
ne renverra que des tables à l'avenir. (Pull Request)Obsolète
table_exists?
- La méthode#table_exists?
vérifierait à la fois les tables et les vues. Pour rendre leur comportement cohérent avec#tables
,#table_exists?
vérifiera uniquement les tables à l'avenir. (Pull Request)Déprécation de l'envoi de l'argument
offset
àfind_nth
. Veuillez utiliser la méthodeoffset
sur la relation à la place. (Pull Request)Obsolète
{insert|update|delete}_sql
dansDatabaseStatements
. Utilisez les méthodes publiques{insert|update|delete}
à la place. (Pull Request)Obsolète
use_transactional_fixtures
au profit deuse_transactional_tests
pour plus de clarté. (Pull Request)Obsolète le passage d'une colonne à
ActiveRecord::Connection#quote
. (commit)Ajout d'une option
end
àfind_in_batches
qui complète le paramètrestart
pour spécifier où arrêter le traitement par lots. (Pull Request)
7.3 Changements notables
Ajout d'une option
foreign_key
àreferences
lors de la création de la table. (commit)Nouvelle API d'attributs. (commit)
Ajout des options
:_prefix
/:_suffix
à la définition deenum
. (Pull Request, Pull Request)Ajout de
#cache_key
àActiveRecord::Relation
. (Pull Request)Modification de la valeur par défaut de
null
pourtimestamps
àfalse
. (commit)Ajout de
ActiveRecord::SecureToken
pour encapsuler la génération de jetons uniques pour les attributs d'un modèle en utilisantSecureRandom
. (Pull Request)Ajout de l'option
:if_exists
pourdrop_table
. (Pull Request)Ajout de
ActiveRecord::Base#accessed_fields
, qui peut être utilisé pour rapidement découvrir quels champs ont été lus à partir d'un modèle lorsque vous cherchez à sélectionner uniquement les données dont vous avez besoin dans la base de données. (commit)Ajout de la méthode
#or
surActiveRecord::Relation
, permettant d'utiliser l'opérateur OR pour combiner des clauses WHERE ou HAVING. (commit)Ajout de
ActiveRecord::Base.suppress
pour empêcher l'enregistrement du receveur pendant le bloc donné. (Pull Request)belongs_to
déclenchera désormais une erreur de validation par défaut si l' association n'est pas présente. Vous pouvez désactiver cela pour chaque association avecoptional: true
. Déprécation également de l'optionrequired
au profit deoptional
pourbelongs_to
. (Pull Request)Ajout de
config.active_record.dump_schemas
pour configurer le comportement dedb:structure:dump
. (Pull Request)Ajout de l'option
config.active_record.warn_on_records_fetched_greater_than
. (Pull Request)Ajout d'une prise en charge native du type de données JSON dans MySQL. (Pull Request)
Ajout de la prise en charge de la suppression d'index de manière concurrente dans PostgreSQL. (Pull Request)
Ajout des méthodes
#views
et#view_exists?
sur les adaptateurs de connexion. (Pull Request)Ajout de
ActiveRecord::Base.ignored_columns
pour rendre certaines colonnes invisibles pour Active Record. (Pull Request)Ajout de
connection.data_sources
etconnection.data_source_exists?
. Ces méthodes déterminent quelles relations peuvent être utilisées pour soutenir les modèles Active Record (généralement des tables et des vues). (Pull Request)Autoriser les fichiers de fixtures à définir la classe de modèle dans le fichier YAML lui-même. (Pull Request)
Ajout de la possibilité de définir
uuid
comme clé primaire par défaut lors de la génération de migrations de base de données. (Pull Request)Ajout de
ActiveRecord::Relation#left_joins
etActiveRecord::Relation#left_outer_joins
. (Pull Request)Ajout des rappels
after_{create,update,delete}_commit
. (Pull Request)Versionner l'API présentée aux classes de migration, afin de pouvoir modifier les valeurs par défaut des paramètres sans casser les migrations existantes ou les forcer à être réécrites via un cycle de dépréciation. (Pull Request)
ApplicationRecord
est une nouvelle superclasse pour tous les modèles d'application, analogue aux contrôleurs d'application qui héritent deApplicationController
au lieu deActionController::Base
. Cela permet aux applications de configurer le comportement des modèles à l'échelle de l'application en un seul endroit. (Pull Request)Ajout des méthodes ActiveRecord
#second_to_last
et#third_to_last
. (Pull Request)Ajout de la possibilité d'annoter les objets de base de données (tables, colonnes, index) avec des commentaires stockés dans les métadonnées de la base de données pour PostgreSQL et MySQL. (Pull Request)
Ajout de la prise en charge des instructions préparées pour l'adaptateur
mysql2
, pour mysql2 0.4.4+. Auparavant, cela était uniquement pris en charge par l'adaptateur héritémysql
obsolète. Pour l'activer, définissezprepared_statements: true
dansconfig/database.yml
. (Pull Request)Ajout de la possibilité d'appeler
ActionRecord::Relation#update
sur des objets de relation qui exécutera les validations et les rappels sur tous les objets de la relation. (Pull Request)Ajout de l'option
:touch
à la méthodesave
afin que les enregistrements puissent être enregistrés sans mettre à jour les horodatages. (Pull Request)Ajout de la prise en charge des index d'expression et des classes d'opérateurs pour PostgreSQL. (commit)
Ajout de l'option
:index_errors
pour ajouter des index aux erreurs des attributs imbriqués. (Pull Request)Ajout de la prise en charge des dépendances de destruction bidirectionnelle. (Pull Request)
Ajout de la prise en charge des rappels
after_commit
dans les tests transactionnels. (Pull Request)Ajout de la méthode
foreign_key_exists?
pour vérifier si une clé étrangère existe ou non sur une table. (Pull Request)Ajout de l'option
:time
à la méthodetouch
pour mettre à jour les enregistrements avec une heure différente de l'heure actuelle. (Pull Request)Modification des rappels de transaction pour ne pas masquer les erreurs. Avant cette modification, toutes les erreurs survenues dans un rappel de transaction étaient capturées et affichées dans les journaux, sauf si vous utilisiez l'option (nouvellement dépréciée)
raise_in_transactional_callbacks = true
.Désormais, ces erreurs ne sont plus capturées et remontent simplement, ce qui correspond au comportement des autres rappels. (commit)
8 Active Model
Veuillez vous référer au journal des modifications pour plus de détails sur les changements.
8.1 Suppressions
Suppression des méthodes dépréciées
ActiveModel::Dirty#reset_#{attribute}
etActiveModel::Dirty#reset_changes
. (Pull Request)Suppression de la sérialisation XML. Cette fonctionnalité a été extraite dans le gem activemodel-serializers-xml. (Pull Request)
Suppression du module
ActionController::ModelNaming
. (Pull Request)
8.2 Dépréciations
Dépréciation du retour de
false
comme moyen d'arrêter les chaînes de rappels d'Active Model etActiveModel::Validations
. La méthode recommandée est d'utiliserthrow(:abort)
. (Pull Request)Dépréciation des méthodes
ActiveModel::Errors#get
,ActiveModel::Errors#set
etActiveModel::Errors#[]=
qui ont un comportement incohérent. (Pull Request)Dépréciation de l'option
:tokenizer
pourvalidates_length_of
, au profit de Ruby pur. (Pull Request)Dépréciation des méthodes
ActiveModel::Errors#add_on_empty
etActiveModel::Errors#add_on_blank
sans remplacement. (Pull Request)
8.3 Changements notables
Ajout de la méthode
ActiveModel::Errors#details
pour déterminer quel validateur a échoué. (Pull Request)Extraction de
ActiveRecord::AttributeAssignment
versActiveModel::AttributeAssignment
, permettant de l'utiliser pour n'importe quel objet en tant que module inclus. (Pull Request)Ajout des méthodes
ActiveModel::Dirty#[attr_name]_previously_changed?
etActiveModel::Dirty#[attr_name]_previous_change
pour améliorer l'accès aux modifications enregistrées après la sauvegarde du modèle. (Pull Request)Validation de plusieurs contextes en une seule fois avec les méthodes
valid?
etinvalid?
. (Pull Request)Modification de
validates_acceptance_of
pour acceptertrue
comme valeur par défaut en plus de1
. (Pull Request)Active Job
Veuillez vous référer au Changelog pour des changements détaillés.
8.4 Changements notables
ActiveJob::Base.deserialize
délègue à la classe de travail. Cela permet aux travaux d'attacher des métadonnées arbitraires lorsqu'ils sont sérialisés et de les lire lorsqu'ils sont exécutés. (Pull Request)Ajout de la possibilité de configurer l'adaptateur de file d'attente pour chaque travail sans affecter les autres. (Pull Request)
Un travail généré hérite maintenant de
app/jobs/application_job.rb
par défaut. (Pull Request)Autoriser
DelayedJob
,Sidekiq
,qu
,que
etqueue_classic
à renvoyer l'identifiant du travail àActiveJob::Base
en tant queprovider_job_id
. (Pull Request, Pull Request, commit)Implémenter un processeur de travail
AsyncJob
simple et un adaptateur associéAsyncAdapter
qui mettent les travaux en file d'attente dans un pool de threadsconcurrent-ruby
. (Pull Request)Changer l'adaptateur par défaut de "inline" à "async". C'est un meilleur choix par défaut car les tests ne dépendront pas par erreur d'un comportement se produisant de manière synchrone. (commit)
9 Active Support
Veuillez vous référer au Changelog pour des changements détaillés.
9.1 Suppressions
Suppression de
ActiveSupport::JSON::Encoding::CircularReferenceError
obsolète. (commit)Suppression des méthodes obsolètes
ActiveSupport::JSON::Encoding.encode_big_decimal_as_string=
etActiveSupport::JSON::Encoding.encode_big_decimal_as_string
. (commit)Suppression de
ActiveSupport::SafeBuffer#prepend
obsolète. (commit)Suppression des méthodes obsolètes de
Kernel
.silence_stderr
,silence_stream
,capture
etquietly
. (commit)Suppression du fichier obsolète
active_support/core_ext/big_decimal/yaml_conversions
. (commit)Suppression des méthodes obsolètes
ActiveSupport::Cache::Store.instrument
etActiveSupport::Cache::Store.instrument=
. (commit)Suppression de
Class#superclass_delegating_accessor
obsolète. Utilisez plutôtClass#class_attribute
. (Pull Request)Suppression de
ThreadSafe::Cache
. UtilisezConcurrent::Map
à la place. (Pull Request)Suppression de
Object#itself
car il est implémenté dans Ruby 2.2. (Pull Request)
9.2 Obsolescence
Obsolescence de
MissingSourceFile
au profit deLoadError
. (commit)Obsolescence de
alias_method_chain
au profit deModule#prepend
introduit dans Ruby 2.0. (Pull Request)Obsolescence de
ActiveSupport::Concurrency::Latch
au profit deConcurrent::CountDownLatch
de concurrent-ruby. (Pull Request)Obsolescence de l'option
:prefix
denumber_to_human_size
sans remplacement. (Pull Request)Obsolescence de
Module#qualified_const_
au profit des méthodes intégréesModule#const_
. (Pull Request)Obsolescence du passage d'une chaîne pour définir un rappel. (Pull Request)
Obsolescence de
ActiveSupport::Cache::Store#namespaced_key
,ActiveSupport::Cache::MemCachedStore#escape_key
etActiveSupport::Cache::FileStore#key_file_path
. Utiliseznormalize_key
à la place. (Pull Request, commit)Déprécié
ActiveSupport::Cache::LocaleCache#set_cache_value
au profit dewrite_cache_value
. (Pull Request)Déprécié le passage d'arguments à
assert_nothing_raised
. (Pull Request)Déprécié
Module.local_constants
au profit deModule.constants(false)
. (Pull Request)
9.3 Changements notables
Ajout des méthodes
#verified
et#valid_message?
àActiveSupport::MessageVerifier
. (Pull Request)Changement de la manière dont les chaînes de rappel peuvent être arrêtées. La méthode préférée pour arrêter une chaîne de rappel est maintenant d'utiliser explicitement
throw(:abort)
. (Pull Request)Nouvelle option de configuration
config.active_support.halt_callback_chains_on_return_false
pour spécifier si les chaînes de rappel d'ActiveRecord, ActiveModel et ActiveModel::Validations peuvent être arrêtées en retournantfalse
dans un rappel 'before'. (Pull Request)Changement de l'ordre de test par défaut de
:sorted
à:random
. (commit)Ajout des méthodes
#on_weekend?
,#on_weekday?
,#next_weekday
,#prev_weekday
àDate
,Time
etDateTime
. (Pull Request, Pull Request)Ajout de l'option
same_time
à#next_week
et#prev_week
pourDate
,Time
, etDateTime
. (Pull Request)Ajout des méthodes
#prev_day
et#next_day
en complément de#yesterday
et#tomorrow
pourDate
,Time
etDateTime
. (Pull Request)Ajout de
SecureRandom.base58
pour la génération de chaînes aléatoires en base58. (commit)Ajout de
file_fixture
àActiveSupport::TestCase
. Il fournit un mécanisme simple pour accéder aux fichiers d'exemple dans vos cas de test. (Pull Request)Ajout de
#without
surEnumerable
etArray
pour renvoyer une copie d'un énumérable sans les éléments spécifiés. (Pull Request)Ajout de
ActiveSupport::ArrayInquirer
etArray#inquiry
. (Pull Request)Ajout de
ActiveSupport::TimeZone#strptime
pour permettre l'analyse des heures comme si elles provenaient d'un fuseau horaire donné. (commit)Ajout des méthodes de requête
Integer#positive?
etInteger#negative?
dans la veine deInteger#zero?
. (commit)Ajout d'une version bang aux méthodes
get
deActiveSupport::OrderedOptions
qui lèvera uneKeyError
si la valeur est.blank?
. (Pull Request)Ajout de
Time.days_in_year
pour renvoyer le nombre de jours dans l'année donnée, ou l'année en cours si aucun argument n'est fourni. (commit)Ajout d'un observateur de fichiers événementiel pour détecter de manière asynchrone les modifications dans le code source de l'application, les routes, les localisations, etc. (Pull Request)
Ajout de la suite de méthodes thread_m/cattr_accessor/reader/writer pour déclarer des variables de classe et de module qui vivent par thread. (Pull Request)
Ajout des méthodes
Array#second_to_last
etArray#third_to_last
. (Demande de tirage)Publication des API
ActiveSupport::Executor
etActiveSupport::Reloader
pour permettre aux composants et aux bibliothèques de gérer et de participer à l'exécution du code de l'application et au processus de rechargement de l'application. (Demande de tirage)ActiveSupport::Duration
prend désormais en charge le formatage et l'analyse ISO8601. (Demande de tirage)ActiveSupport::JSON.decode
prend désormais en charge l'analyse des heures locales ISO8601 lorsqueparse_json_times
est activé. (Demande de tirage)ActiveSupport::JSON.decode
renvoie désormais des objetsDate
pour les chaînes de dates. (Demande de tirage)Ajout de la possibilité à
TaggedLogging
de permettre aux enregistreurs de journaux d'être instanciés plusieurs fois afin qu'ils ne partagent pas les balises entre eux. (Demande de tirage)
10 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. Bravo à 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.