1 Atualizando para o Rails 5.0
Se você está atualizando um aplicativo existente, é uma ótima ideia ter uma boa cobertura de testes antes de começar. Você também deve primeiro atualizar para o Rails 4.2, caso ainda não tenha feito isso, e garantir que seu aplicativo ainda funcione como esperado antes de tentar uma atualização para o Rails 5.0. Uma lista de coisas para ficar atento ao atualizar está disponível no guia Atualizando o Ruby on Rails.
2 Principais Recursos
2.1 Action Cable
Action Cable é um novo framework no Rails 5. Ele integra perfeitamente WebSockets com o restante do seu aplicativo Rails.
Action Cable permite que recursos em tempo real sejam escritos em Ruby no mesmo estilo e formato do restante do seu aplicativo Rails, ao mesmo tempo em que é performático e escalável. É uma oferta de pilha completa que fornece tanto um framework JavaScript do lado do cliente quanto um framework Ruby do lado do servidor. Você tem acesso ao seu modelo de domínio completo escrito com Active Record ou sua ORM de escolha.
Consulte o guia Visão Geral do Action Cable para obter mais informações.
2.2 Aplicações API
Agora o Rails pode ser usado para criar aplicativos API apenas. Isso é útil para criar e servir APIs simplificadas semelhantes à API do Twitter ou GitHub, que podem ser usadas para servir aplicativos públicos, bem como aplicativos personalizados.
Você pode gerar um novo aplicativo Rails API usando:
$ rails new my_api --api
Isso fará três coisas principais:
- Configurar sua aplicação para iniciar com um conjunto mais limitado de middlewares do que o normal. Especificamente, não incluirá por padrão nenhum middleware principalmente útil para aplicativos de navegador (como suporte a cookies).
- Fazer com que
ApplicationController
herde deActionController::API
em vez deActionController::Base
. Assim como os middlewares, isso deixará de fora quaisquer módulos do Action Controller que forneçam funcionalidades principalmente usadas por aplicativos de navegador. - Configurar os geradores para pular a geração de views, helpers e assets ao gerar um novo recurso.
A aplicação fornece uma base para APIs, que podem então ser configuradas para incluir funcionalidades adequadas às necessidades da aplicação.
Consulte o guia Using Rails for API-only Applications para obter mais informações.
2.3 API de atributos do Active Record
Define um atributo com um tipo em um modelo. Ele substituirá o tipo de atributos existentes, se necessário.
Isso permite controlar como os valores são convertidos para e de SQL quando atribuídos a um modelo.
Também altera o comportamento dos valores passados para ActiveRecord::Base.where
, o que permite usar nossos objetos de domínio em grande parte do Active Record, sem precisar depender de detalhes de implementação ou monkey patching.
Algumas coisas que você pode alcançar com isso:
- O tipo detectado pelo Active Record pode ser substituído.
- Um valor padrão também pode ser fornecido.
- Os atributos não precisam ser suportados por uma coluna de banco de dados.
# 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')
# antes
store_listing.price_in_cents # => BigDecimal.new(10.1)
StoreListing.new.my_string # => "original default"
class StoreListing < ActiveRecord::Base
attribute :price_in_cents, :integer # tipo personalizado
attribute :my_string, :string, default: "new default" # valor padrão
attribute :my_default_proc, :datetime, default: -> { Time.now } # valor padrão
attribute :field_without_db_column, :integer, array: true
end
# depois
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]}
Criando Tipos Personalizados:
Você pode definir seus próprios tipos personalizados, desde que eles respondam aos métodos definidos no tipo de valor. O método deserialize
ou cast
será chamado no objeto do seu tipo, com a entrada bruta do banco de dados ou dos seus controladores. Isso é útil, por exemplo, ao fazer conversões personalizadas, como dados de dinheiro.
Consultando:
Quando ActiveRecord::Base.where
é chamado, ele usará o tipo definido pela classe do modelo para converter o valor em SQL, chamando serialize
no objeto do seu tipo.
Isso dá aos objetos a capacidade de especificar como converter valores ao executar consultas SQL.
Rastreamento de Mudanças:
O tipo de um atributo pode alterar como o rastreamento de mudanças é realizado.
Consulte a documentação para obter uma descrição detalhada.
2.4 Test Runner
Um novo test runner foi introduzido para aprimorar as capacidades de execução de testes no Rails.
Para usar este test runner, basta digitar bin/rails test
.
O Test Runner é inspirado no RSpec
, minitest-reporters
, maxitest
e outros.
Ele inclui alguns desses avanços notáveis:
- Executar um único teste usando o número da linha do teste.
- Executar vários testes apontando para o número da linha dos testes.
- Melhoria nas mensagens de falha, que também facilitam a reexecução dos testes falhados.
- Falhar rapidamente usando a opção
-f
, para interromper os testes imediatamente ao ocorrer uma falha, em vez de esperar a conclusão da suíte. - Adiar a saída dos testes até o final de uma execução completa de testes usando a opção
-d
. - Saída completa do backtrace da exceção usando a opção
-b
. - Integração com o minitest para permitir opções como
-s
para dados de seed de teste,-n
para executar um teste específico pelo nome,-v
para uma saída verbose melhorada, entre outras. - Saída colorida dos testes.
3 Railties
Consulte o Changelog para obter detalhes das alterações.
3.1 Remoções
- Removido suporte ao debugger, use o byebug em vez disso.
debugger
não é suportado pelo Ruby 2.2. (commit) Removidas as tarefas
test:all
etest:all:db
obsoletas. (commit)Removido o
Rails::Rack::LogTailer
obsoleto. (commit)Removida a constante
RAILS_CACHE
obsoleta. (commit)Removida a configuração
serve_static_assets
obsoleta. (commit)Removidas as tarefas de documentação
doc:app
,doc:rails
edoc:guides
. (commit)Removido o middleware
Rack::ContentLength
da pilha padrão. (Commit)
3.2 Depreciações
config.static_cache_control
foi depreciado em favor deconfig.public_file_server.headers
. (Pull Request)config.serve_static_files
foi depreciado em favor deconfig.public_file_server.enabled
. (Pull Request)As tarefas no namespace
rails
foram depreciadas em favor do namespaceapp
. (por exemplo, as tarefasrails:update
erails:template
foram renomeadas paraapp:update
eapp:template
.) (Pull Request)
3.3 Mudanças notáveis
Adicionado o test runner do Rails
bin/rails test
. (Pull Request)Aplicações e plugins recém-gerados recebem um
README.md
em Markdown. (commit, Pull Request)Adicionada a tarefa
bin/rails restart
para reiniciar sua aplicação Rails tocando emtmp/restart.txt
. (Pull Request)Adicionada a tarefa
bin/rails initializers
para imprimir todos os inicializadores definidos na ordem em que são invocados pelo Rails. (Pull Request)Adicionada a tarefa
bin/rails dev:cache
para habilitar ou desabilitar o cache no modo de desenvolvimento. (Pull Request)Adicionado o script
bin/update
para atualizar automaticamente o ambiente de desenvolvimento. (Pull Request)Tarefas Rake são proxy através de
bin/rails
. (Pull Request, Pull Request)Novas aplicações são geradas com o monitor de sistema de arquivos baseado em eventos habilitado no Linux e macOS. Essa funcionalidade pode ser desativada passando
--skip-listen
para o gerador. (commit, commit)Gere aplicações com a opção de registrar logs no STDOUT em produção usando a variável de ambiente
RAILS_LOG_TO_STDOUT
. (Pull Request)HSTS é habilitado com o cabeçalho IncludeSubdomains para novas aplicações. (Pull Request)
O gerador de aplicação escreve um novo arquivo
config/spring.rb
, que informa ao Spring para monitorar arquivos comuns adicionais. (commit)Adicionado
--skip-action-mailer
para pular o Action Mailer ao gerar uma nova aplicação. (Pull Request)Removido o diretório
tmp/sessions
e a tarefa rake de limpeza associada a ele. (Pull Request)Alterado o
_form.html.erb
gerado pelo gerador de scaffold para usar variáveis locais. (Pull Request)Desabilitada a carga automática de classes no ambiente de produção. (commit)
4 Action Pack
Consulte o Changelog para obter detalhes das alterações.
4.1 Remoções
Removido
ActionDispatch::Request::Utils.deep_munge
. (commit)Removido
ActionController::HideActions
. (Pull Request)Removidos os métodos de espaço reservado
respond_to
erespond_with
, essa funcionalidade foi extraída para a gem responders. (commit)Removidos os arquivos de asserção obsoletos. (commit)
Removido o uso obsoleto de chaves de string nos auxiliares de URL. (commit)
Removida a opção obsoleta
only_path
nos auxiliares*_path
. (commit)Removido o suporte obsoleto
NamedRouteCollection#helpers
. (commit)Removido o suporte obsoleto para definir rotas com a opção
:to
que não contém#
. (commit)Removido
ActionDispatch::Response#to_ary
obsoleto. (commit)Removido
ActionDispatch::Request#deep_munge
obsoleto. (commit)Removido
ActionDispatch::Http::Parameters#symbolized_path_parameters
obsoleto. (commit)Removida a opção obsoleta
use_route
nos testes de controlador. (commit)Removidos
assigns
eassert_template
. Ambos os métodos foram extraídos para a gem rails-controller-testing. (Pull Request)
4.2 Depreciações
Depreciados todos os callbacks
*_filter
em favor dos callbacks*_action
. (Pull Request)Depreciados os métodos de teste de integração
*_via_redirect
. Usefollow_redirect!
manualmente após a chamada da requisição para o mesmo comportamento. (Pull Request)Depreciado
AbstractController#skip_action_callback
em favor de métodos individuaisskip_callback
. (Pull Request)Depreciada a opção
:nothing
para o métodorender
. (Pull Request)Depreciado o uso do primeiro parâmetro como
Hash
e o código de status padrão para o métodohead
. (Pull Request)Depreciado o uso de strings ou símbolos para nomes de classes de middleware. Use nomes de classe em vez disso. (commit)
Depreciado o acesso aos tipos de MIME via constantes (por exemplo,
Mime::HTML
). Use o operador de subscrito com um símbolo em vez disso (por exemplo,Mime[:html]
). (Pull Request)Depreciado
redirect_to :back
em favor deredirect_back
, que aceita um argumentofallback_location
obrigatório, eliminando assim a possibilidade de umRedirectBackError
. (Pull Request)ActionDispatch::IntegrationTest
eActionController::TestCase
depreciam argumentos posicionais em favor de argumentos de palavra-chave. (Pull Request)Depreciados os parâmetros de caminho
:controller
e:action
. (Pull Request)Depreciado o método env nas instâncias de controlador. (commit)
ActionDispatch::ParamsParser
está depreciado e foi removido da pilha de middlewares. Para configurar os analisadores de parâmetros, useActionDispatch::Request.parameter_parsers=
. (commit, commit)Mudanças notáveis
Adicionado
ActionController::Renderer
para renderizar templates arbitrários fora das ações do controlador. (Pull Request)Migração para a sintaxe de argumentos de palavra-chave em
ActionController::TestCase
e métodos de solicitação HTTP deActionDispatch::Integration
. (Pull Request)Adicionado
http_cache_forever
ao Action Controller, para que possamos armazenar em cache uma resposta que nunca expira. (Pull Request)Fornecer acesso mais amigável às variantes de solicitação. (Pull Request)
Para ações sem templates correspondentes, renderizar
head :no_content
em vez de gerar um erro. (Pull Request)Adicionada a capacidade de substituir o construtor de formulários padrão para um controlador. (Pull Request)
Adicionado suporte para aplicativos somente de API.
ActionController::API
é adicionado como substituto deActionController::Base
para esse tipo de aplicativo. (Pull Request)Tornar
ActionController::Parameters
não herda mais deHashWithIndifferentAccess
. (Pull Request)Tornar mais fácil optar por
config.force_ssl
econfig.ssl_options
por tornando-os menos perigosos de tentar e mais fáceis de desativar. (Pull Request)Adicionada a capacidade de retornar cabeçalhos arbitrários para
ActionDispatch::Static
. (Pull Request)Alterado o padrão de prepend de
protect_from_forgery
parafalse
. (commit)ActionController::TestCase
será movido para sua própria gema no Rails 5.1. UseActionDispatch::IntegrationTest
em seu lugar. (commit)O Rails gera ETags fracos por padrão. (Pull Request)
Ações do controlador sem uma chamada
render
explícita e sem templates correspondentes renderizarãohead :no_content
implicitamente em vez de gerar um erro. (Pull Request 1, 2)Adicionada uma opção para tokens CSRF por formulário. (Pull Request)
Adicionada codificação de solicitação e análise de resposta aos testes de integração. (Pull Request)
Adicione
ActionController#helpers
para obter acesso ao contexto de visualização no nível do controlador. (Pull Request)As mensagens flash descartadas são removidas antes de serem armazenadas na sessão. (Pull Request)
Adicionado suporte para passar uma coleção de registros para
fresh_when
estale?
. (Pull Request)ActionController::Live
se tornou umActiveSupport::Concern
. Isso significa que ele não pode ser apenas incluído em outros módulos sem estendê-los comActiveSupport::Concern
ouActionController::Live
não terá efeito em produção. Algumas pessoas podem estar usando outro módulo para incluir algum código especial de tratamento de falha de autenticaçãoWarden
/Devise
também, já que o middleware não pode capturar um:warden
lançado por uma thread gerada, que é o caso ao usarActionController::Live
. (Mais detalhes neste problema)Introduza
Response#strong_etag=
e#weak_etag=
e opções análogas parafresh_when
estale?
. (Pull Request)
5 Action View
Consulte o Changelog para obter detalhes das alterações.
5.1 Remoções
Removido
AbstractController::Base::parent_prefixes
obsoleto. (commit)Removido
ActionView::Helpers::RecordTagHelper
, essa funcionalidade foi extraída para a gem record_tag_helper. (Pull Request)Removida a opção
:rescue_format
para o helpertranslate
pois não é mais suportada pelo I18n. (Pull Request)
5.2 Mudanças Notáveis
Alterado o manipulador de templates padrão de
ERB
paraRaw
. (commit)A renderização de coleções pode armazenar em cache e buscar vários parciais de uma vez. (Pull Request, commit)
Adicionada correspondência de curinga para dependências explícitas. (Pull Request)
Tornar
disable_with
o comportamento padrão para tags de envio. Desabilita o botão no envio para evitar envios duplicados. (Pull Request)O nome do template parcial não precisa mais ser um identificador Ruby válido. (commit)
O helper
datetime_tag
agora gera uma tag de input com o tipodatetime-local
. (Pull Request)Permite blocos ao renderizar com o helper
render partial:
. (Pull Request)
6 Action Mailer
Consulte o Changelog para obter detalhes das alterações.
6.1 Remoções
Removidos os helpers
*_path
obsoletos nas visualizações de e-mail. (commit)Removidos os métodos obsoletos
deliver
edeliver!
. (commit)
6.2 Mudanças Notáveis
A busca de templates agora respeita o locale padrão e as fallbacks do I18n. (commit)
Adicionado sufixo
_mailer
aos mailers criados via gerador, seguindo a mesma convenção de nomenclatura usada em controladores e jobs. (Pull Request)Adicionados
assert_enqueued_emails
eassert_no_enqueued_emails
. (Pull Request)Adicionada a configuração
config.action_mailer.deliver_later_queue_name
para definir o nome da fila do mailer. (Pull Request)Adicionado suporte para cache de fragmentos nas visualizações do Action Mailer. Adicionada nova opção de configuração
config.action_mailer.perform_caching
para determinar se seus templates devem realizar cache ou não. (Pull Request)
7 Active Record
Consulte o Changelog para obter detalhes das alterações.
7.1 Remoções
Removido o comportamento obsoleto que permitia passar matrizes aninhadas como valores de consulta. (Pull Request)
Removido
ActiveRecord::Tasks::DatabaseTasks#load_schema
obsoleto. Este método foi substituído porActiveRecord::Tasks::DatabaseTasks#load_schema_for
. (commit)Removido
serialized_attributes
obsoleto. (commit)Removido contador automático obsoleto em
has_many :through
. (commit)Removido
sanitize_sql_hash_for_conditions
obsoleto. (commit)Removido
Reflection#source_macro
obsoleto. (commit)Removido
symbolized_base_class
esymbolized_sti_name
obsoletos. (commit)Removido
ActiveRecord::Base.disable_implicit_join_references=
. (commit)Removido acesso obsoleto à especificação de conexão usando um acessor de string. (commit)
Removido suporte obsoleto para pré-carregar associações dependentes da instância. (commit)
Removido suporte obsoleto para intervalos PostgreSQL com limites inferiores exclusivos. (commit)
Removida a depreciação ao modificar uma relação com Arel em cache. Agora, isso gera um erro
ImmutableRelation
. (commit)Removido
ActiveRecord::Serialization::XmlSerializer
do núcleo. Essa funcionalidade foi extraída para o activemodel-serializers-xml gem. (Pull Request)Removido suporte para o adaptador de banco de dados legado
mysql
do núcleo. A maioria dos usuários deve ser capaz de usarmysql2
. Ele será convertido em um gem separado quando encontrarmos alguém para mantê-lo. (Pull Request 1, Pull Request 2)Removido suporte para o gem
protected_attributes
. (commit)Removido suporte para versões do PostgreSQL abaixo de 9.1. (Pull Request)
Removido suporte para o gem
activerecord-deprecated_finders
. (commit)Removida a constante
ActiveRecord::ConnectionAdapters::Column::TRUE_VALUES
. (commit)
7.2 Depreciações
Depreciado passar uma classe como valor em uma consulta. Os usuários devem passar strings em vez disso. (Pull Request)
Depreciado retornar
false
como forma de interromper as cadeias de callback do Active Record. A forma recomendada é usarthrow(:abort)
. (Pull Request)Depreciado
ActiveRecord::Base.errors_in_transactional_callbacks=
. (commit)Depreciado o uso de
Relation#uniq
, useRelation#distinct
em vez disso. (commit)Depreciado o tipo PostgreSQL
:point
em favor de um novo que retornará objetosPoint
em vez de umArray
(Pull Request)Depreciado recarregar a associação forçadamente passando um argumento verdadeiro para o método de associação. (Pull Request)
Depreciadas as chaves para erros de
restrict_dependent_destroy
da associação em favor de novos nomes de chave. (Pull Request)Sincronizado o comportamento de
#tables
. (Pull Request)Depreciado
SchemaCache#tables
,SchemaCache#table_exists?
eSchemaCache#clear_table_cache!
em favor de seus novos equivalentes de fonte de dados. (Pull Request)connection.tables
foi depreciado nos adaptadores SQLite3 e MySQL. (Pull Request)Foi depreciado o envio de argumentos para
#tables
- o método#tables
de alguns adaptadores (mysql2, sqlite3) retornaria tanto tabelas quanto visualizações, enquanto outros (postgresql) retornam apenas tabelas. Para tornar seu comportamento consistente,#tables
retornará apenas tabelas no futuro. (Pull Request)Foi depreciado
table_exists?
- O método#table_exists?
verificaria tanto tabelas quanto visualizações. Para tornar seu comportamento consistente com#tables
,#table_exists?
verificará apenas tabelas no futuro. (Pull Request)Depreciar o envio do argumento
offset
parafind_nth
. Por favor, use o métodooffset
na relação em vez disso. (Pull Request)Foi depreciado
{insert|update|delete}_sql
emDatabaseStatements
. Use os métodos públicos{insert|update|delete}
em vez disso. (Pull Request)Foi depreciado
use_transactional_fixtures
em favor deuse_transactional_tests
para maior clareza. (Pull Request)Foi depreciado o envio de uma coluna para
ActiveRecord::Connection#quote
. (commit)Adicionada uma opção
end
parafind_in_batches
que complementa o parâmetrostart
para especificar onde parar o processamento em lote. (Pull Request)
7.3 Mudanças notáveis
Adicionada a opção
foreign_key
parareferences
ao criar a tabela. (commit)Nova API de atributos. (commit)
Adicionada a opção
:_prefix
/:_suffix
para a definição deenum
. (Pull Request, Pull Request)Adicionado
#cache_key
paraActiveRecord::Relation
. (Pull Request)Alterado o valor padrão de
null
parafalse
emtimestamps
. (commit)Adicionado
ActiveRecord::SecureToken
para encapsular a geração de tokens únicos para atributos em um modelo usandoSecureRandom
. (Pull Request)Adicionada a opção
:if_exists
paradrop_table
. (Pull Request)Adicionado
ActiveRecord::Base#accessed_fields
, que pode ser usado para rapidamente descobrir quais campos foram lidos de um modelo quando você está procurando apenas selecionar os dados necessários do banco de dados. (commit)Adicionado o método
#or
emActiveRecord::Relation
, permitindo o uso do operador OR para combinar cláusulas WHERE ou HAVING. (commit)Adicionado
ActiveRecord::Base.suppress
para evitar que o receptor seja salvo durante o bloco fornecido. (Pull Request)belongs_to
agora irá disparar um erro de validação por padrão se a associação não estiver presente. Você pode desativar isso em uma base de associação comoptional: true
. Também foi depreciada a opçãorequired
em favor deoptional
parabelongs_to
. (Pull Request)Adicionado
config.active_record.dump_schemas
para configurar o comportamento dodb:structure:dump
. (Pull Request)Adicionada a opção
config.active_record.warn_on_records_fetched_greater_than
. (Pull Request)Adicionado suporte nativo ao tipo de dados JSON no MySQL. (Pull Request)
Adicionado suporte para exclusão de índices simultaneamente no PostgreSQL. (Pull Request)
Adicionados os métodos
#views
e#view_exists?
nos adaptadores de conexão. (Pull Request)Adicionado
ActiveRecord::Base.ignored_columns
para tornar algumas colunas invisíveis para o Active Record. (Pull Request)Adicionados
connection.data_sources
econnection.data_source_exists?
. Esses métodos determinam quais relações podem ser usadas para dar suporte aos modelos do Active Record (geralmente tabelas e visualizações). (Pull Request)Permite que os arquivos de fixtures definam a classe do modelo no próprio arquivo YAML. (Pull Request)
Adicionada a capacidade de definir
uuid
como chave primária padrão ao gerar migrações de banco de dados. (Pull Request)Adicionados
ActiveRecord::Relation#left_joins
eActiveRecord::Relation#left_outer_joins
. (Pull Request)Adicionados callbacks
after_{create,update,delete}_commit
. (Pull Request)Versão da API apresentada para classes de migração, para que possamos alterar os valores padrão dos parâmetros sem quebrar as migrações existentes ou forçá-las a serem reescritas através de um ciclo de depreciação. (Pull Request)
ApplicationRecord
é uma nova superclasse para todos os modelos do aplicativo, análoga aos controladores do aplicativo que herdam deApplicationController
em vez deActionController::Base
. Isso permite que os aplicativos configurem o comportamento do modelo em todo o aplicativo em um único local. (Pull Request)Adicionados os métodos
ActiveRecord#second_to_last
eActiveRecord#third_to_last
. (Pull Request)Adicionada a capacidade de adicionar comentários a objetos de banco de dados (tabelas, colunas, índices) armazenados nos metadados do banco de dados para PostgreSQL e MySQL. (Pull Request)
Adicionado suporte a prepared statements para o adaptador
mysql2
, para mysql2 0.4.4+. Anteriormente, isso era suportado apenas no adaptador legadomysql
descontinuado. Para habilitar, definaprepared_statements: true
emconfig/database.yml
. (Pull Request)Adicionada a capacidade de chamar
ActionRecord::Relation#update
em objetos de relação, o que executará validações e callbacks em todos os objetos da relação. (Pull Request)Adicionada a opção
:touch
ao métodosave
, para que os registros possam ser salvos sem atualizar os timestamps. (Pull Request)Adicionado suporte a índices de expressão e classes de operadores para o PostgreSQL. (commit)
Adicionada a opção
:index_errors
para adicionar índices aos erros de atributos aninhados. (Pull Request)Adicionado suporte para dependências destrutivas bidirecionais. (Pull Request)
Adicionado suporte para callbacks
after_commit
em testes transacionais. (Pull Request)Adicionado método
foreign_key_exists?
para verificar se uma chave estrangeira existe ou não em uma tabela. (Pull Request)Adicionada opção
:time
para o métodotouch
para atualizar registros com um tempo diferente do tempo atual. (Pull Request)Alterados os callbacks de transação para não ignorar erros. Antes dessa alteração, quaisquer erros gerados dentro de um callback de transação eram resgatados e impressos nos logs, a menos que você usasse a opção (recém-depreciada)
raise_in_transactional_callbacks = true
.Agora esses erros não são mais resgatados e apenas são propagados, seguindo o comportamento de outros callbacks. (commit)
8 Active Model
Consulte o Changelog para obter detalhes das alterações.
8.1 Remoções
Removidos os métodos depreciados
ActiveModel::Dirty#reset_#{attribute}
eActiveModel::Dirty#reset_changes
. (Pull Request)Removida a serialização XML. Essa funcionalidade foi extraída para a gem activemodel-serializers-xml. (Pull Request)
Removido o módulo
ActionController::ModelNaming
. (Pull Request)
8.2 Depreciações
Depreciado o retorno
false
como forma de interromper as cadeias de callbacks do Active Model eActiveModel::Validations
. A forma recomendada é usarthrow(:abort)
. (Pull Request)Depreciados os métodos
ActiveModel::Errors#get
,ActiveModel::Errors#set
eActiveModel::Errors#[]=
que possuem comportamento inconsistente. (Pull Request)Depreciada a opção
:tokenizer
paravalidates_length_of
, em favor de Ruby puro. (Pull Request)Depreciados os métodos
ActiveModel::Errors#add_on_empty
eActiveModel::Errors#add_on_blank
sem substituição. (Pull Request)
8.3 Mudanças notáveis
Adicionado o método
ActiveModel::Errors#details
para determinar qual validador falhou. (Pull Request)Extraído
ActiveRecord::AttributeAssignment
paraActiveModel::AttributeAssignment
, permitindo seu uso em qualquer objeto como um módulo incluível. (Pull Request)Adicionados os métodos
ActiveModel::Dirty#[attr_name]_previously_changed?
eActiveModel::Dirty#[attr_name]_previous_change
para melhorar o acesso às alterações registradas após o salvamento do modelo. (Pull Request)Validação de múltiplos contextos no
valid?
einvalid?
de uma vez. (Pull Request)Alteração do
validates_acceptance_of
para aceitartrue
como valor padrão, além de1
. (Pull Request)Active Job
Consulte o Changelog para obter detalhes das alterações.
8.4 Alterações importantes
ActiveJob::Base.deserialize
delega para a classe do trabalho. Isso permite que os trabalhos anexem metadados arbitrários quando são serializados e leiam de volta quando são executados. (Pull Request)Adicionada a capacidade de configurar o adaptador de fila em uma base de trabalho sem afetar uns aos outros. (Pull Request)
Um trabalho gerado agora herda de
app/jobs/application_job.rb
por padrão. (Pull Request)Permitir que
DelayedJob
,Sidekiq
,qu
,que
equeue_classic
relatem o ID do trabalho de volta paraActiveJob::Base
comoprovider_job_id
. (Pull Request, Pull Request, commit)Implementar um processador de
AsyncJob
simples e umAsyncAdapter
associado que enfileiram trabalhos em uma piscina de threadsconcurrent-ruby
. (Pull Request)Alterar o adaptador padrão de inline para async. É uma melhor opção padrão, pois os testes não dependerão erroneamente de um comportamento ocorrendo de forma síncrona. (commit)
9 Active Support
Consulte o Changelog para obter detalhes das alterações.
9.1 Remoções
Removido
ActiveSupport::JSON::Encoding::CircularReferenceError
obsoleto. (commit)Removidos os métodos obsoletos
ActiveSupport::JSON::Encoding.encode_big_decimal_as_string=
eActiveSupport::JSON::Encoding.encode_big_decimal_as_string
. (commit)Removido
ActiveSupport::SafeBuffer#prepend
obsoleto. (commit)Removidos os métodos obsoletos de
Kernel
.silence_stderr
,silence_stream
,capture
equietly
. (commit)Removido arquivo obsoleto
active_support/core_ext/big_decimal/yaml_conversions
. (commit)Removidos os métodos obsoletos
ActiveSupport::Cache::Store.instrument
eActiveSupport::Cache::Store.instrument=
. (commit)Removido
Class#superclass_delegating_accessor
obsoleto. UseClass#class_attribute
em seu lugar. (Pull Request)Removido
ThreadSafe::Cache
. UseConcurrent::Map
em seu lugar. (Pull Request)Removido
Object#itself
pois está implementado no Ruby 2.2. (Pull Request)
9.2 Depreciações
Depreciado
MissingSourceFile
em favor deLoadError
. (commit)Depreciado
alias_method_chain
em favor deModule#prepend
introduzido em Ruby 2.0. (Pull Request)Depreciado
ActiveSupport::Concurrency::Latch
em favor deConcurrent::CountDownLatch
do concurrent-ruby. (Pull Request)Depreciado a opção
:prefix
denumber_to_human_size
sem substituição. (Pull Request)Depreciado
Module#qualified_const_
em favor dos métodosModule#const_
incorporados. (Pull Request)Depreciado passar uma string para definir um callback. (Pull Request)
Depreciados
ActiveSupport::Cache::Store#namespaced_key
,ActiveSupport::Cache::MemCachedStore#escape_key
eActiveSupport::Cache::FileStore#key_file_path
. Usenormalize_key
em seu lugar. (Pull Request, commit)Depreciado
ActiveSupport::Cache::LocaleCache#set_cache_value
em favor dewrite_cache_value
. (Pull Request)Depreciado passar argumentos para
assert_nothing_raised
. (Pull Request)Depreciado
Module.local_constants
em favor deModule.constants(false)
. (Pull Request)
9.3 Mudanças notáveis
Adicionados métodos
#verified
e#valid_message?
paraActiveSupport::MessageVerifier
. (Pull Request)Alterada a forma como as cadeias de chamadas de retorno podem ser interrompidas. O método preferido para interromper uma cadeia de chamadas de retorno a partir de agora é usar explicitamente
throw(:abort)
. (Pull Request)Nova opção de configuração
config.active_support.halt_callback_chains_on_return_false
para especificar se as cadeias de chamadas de retorno do ActiveRecord, ActiveModel e ActiveModel::Validations podem ser interrompidas retornandofalse
em um callback 'before'. (Pull Request)Alterada a ordem padrão dos testes de
:sorted
para:random
. (commit)Adicionados métodos
#on_weekend?
,#on_weekday?
,#next_weekday
,#prev_weekday
paraDate
,Time
eDateTime
. (Pull Request, Pull Request)Adicionada opção
same_time
para#next_week
e#prev_week
paraDate
,Time
, eDateTime
. (Pull Request)Adicionados métodos
#prev_day
e#next_day
como contrapartes de#yesterday
e#tomorrow
paraDate
,Time
eDateTime
. (Pull Request)Adicionado
SecureRandom.base58
para geração de strings aleatórias em base58. (commit)Adicionado
file_fixture
paraActiveSupport::TestCase
. Fornece um mecanismo simples para acessar arquivos de exemplo em seus casos de teste. (Pull Request)Adicionado
#without
emEnumerable
eArray
para retornar uma cópia de um enumerável sem os elementos especificados. (Pull Request)Adicionados
ActiveSupport::ArrayInquirer
eArray#inquiry
. (Pull Request)Adicionado
ActiveSupport::TimeZone#strptime
para permitir a análise de horários como se fossem de um determinado fuso horário. (commit)Adicionados métodos de consulta
Integer#positive?
eInteger#negative?
no estilo deInteger#zero?
. (commit)Adicionada uma versão com exclamação para os métodos de obtenção de
ActiveSupport::OrderedOptions
que lançará umKeyError
se o valor for.blank?
. (Pull Request)Adicionado
Time.days_in_year
para retornar o número de dias no ano fornecido, ou o ano atual se nenhum argumento for fornecido. (commit)Adicionado um observador de arquivos com eventos para detectar assincronamente alterações no código-fonte da aplicação, rotas, localidades, etc. (Pull Request)
Adicionados métodos
thread_m/cattr_accessor/reader/writer
para declarar variáveis de classe e módulo que vivem por thread. (Pull Request)Adicionados os métodos
Array#second_to_last
eArray#third_to_last
. (Pull Request)Publicadas as APIs
ActiveSupport::Executor
eActiveSupport::Reloader
para permitir que componentes e bibliotecas gerenciem e participem da execução do código da aplicação e do processo de recarregamento da aplicação. (Pull Request)ActiveSupport::Duration
agora suporta formatação e análise ISO8601. (Pull Request)ActiveSupport::JSON.decode
agora suporta a análise de horários locais ISO8601 quandoparse_json_times
está habilitado. (Pull Request)ActiveSupport::JSON.decode
agora retorna objetosDate
para strings de data. (Pull Request)Adicionada a capacidade de
TaggedLogging
permitir que os loggers sejam instanciados várias vezes para que eles não compartilhem tags entre si. (Pull Request)
10 Créditos
Veja a lista completa de contribuidores para o Rails para as muitas pessoas que passaram muitas horas fazendo do Rails o framework estável e robusto que ele é. Parabéns a todos eles.
Feedback
Você é incentivado a ajudar a melhorar a qualidade deste guia.
Por favor, contribua se encontrar algum erro de digitação ou factual. Para começar, você pode ler nossa contribuição à documentação seção.
Você também pode encontrar conteúdo incompleto ou desatualizado. Por favor, adicione qualquer documentação ausente para o principal. Certifique-se de verificar Guias Edge primeiro para verificar se os problemas já foram corrigidos ou não no branch principal. Verifique as Diretrizes dos Guias do Ruby on Rails para estilo e convenções.
Se por algum motivo você encontrar algo para corrigir, mas não puder corrigi-lo você mesmo, por favor abra uma issue.
E por último, mas não menos importante, qualquer tipo de discussão sobre a documentação do Ruby on Rails é muito bem-vinda no Fórum oficial do Ruby on Rails.