1 Atualizando para o Rails 4.2
Se você está atualizando uma aplicação existente, é uma ótima ideia ter uma boa cobertura de testes antes de começar. Você também deve primeiro atualizar para o Rails 4.1, caso ainda não tenha feito isso, e garantir que sua aplicação ainda funcione como esperado antes de tentar atualizar para o Rails 4.2. Uma lista de coisas a serem observadas ao atualizar está disponível no guia Atualizando o Ruby on Rails.
2 Principais Funcionalidades
2.1 Active Job
Active Job é um novo framework no Rails 4.2. É uma interface comum em cima de sistemas de fila como Resque, Delayed Job, Sidekiq e outros.
Jobs escritos com a API do Active Job são executados em qualquer uma das filas suportadas graças aos seus respectivos adaptadores. O Active Job já vem pré-configurado com um executor inline que executa os jobs imediatamente.
Jobs frequentemente precisam receber objetos do Active Record como argumentos. O Active Job passa referências de objetos como URIs (identificadores uniformes de recursos) em vez de serializar o objeto em si. A nova biblioteca Global ID constrói URIs e busca os objetos que eles referenciam. Passar objetos do Active Record como argumentos de jobs funciona simplesmente usando o Global ID internamente.
Por exemplo, se trashable
é um objeto do Active Record, então este job é executado sem problemas, sem envolver serialização:
class TrashableCleanupJob < ActiveJob::Base
def perform(trashable, depth)
trashable.cleanup(depth)
end
end
Veja o guia Noções Básicas do Active Job para mais informações.
2.2 E-mails Assíncronos
Baseado no Active Job, o Action Mailer agora vem com um método deliver_later
que envia e-mails através da fila, para que não bloqueie o controller ou o model se a fila for assíncrona (a fila inline padrão bloqueia).
Ainda é possível enviar e-mails imediatamente com deliver_now
.
2.3 Adequate Record
Adequate Record é um conjunto de melhorias de desempenho no Active Record que torna as chamadas comuns de find
e find_by
e algumas consultas de associação até 2x mais rápidas.
Isso funciona através do cache de consultas SQL com prepared statements e reutilizando-os em chamadas similares, pulando a maior parte do trabalho de geração de consulta em chamadas subsequentes. Para mais detalhes, por favor, consulte o post no blog de Aaron Patterson.
O Active Record automaticamente aproveitará essa funcionalidade em operações suportadas sem qualquer envolvimento do usuário ou alterações de código. Aqui estão alguns exemplos de operações suportadas:
Post.find(1) # A primeira chamada gera e armazena o prepared statement
Post.find(2) # Chamadas subsequentes reutilizam o prepared statement armazenado
Post.find_by_title('first post')
Post.find_by_title('second post')
Post.find_by(title: 'first post')
Post.find_by(title: 'second post')
post.comments
post.comments(true)
É importante destacar que, como os exemplos acima sugerem, os prepared statements não armazenam os valores passados nas chamadas dos métodos; em vez disso, eles possuem espaços reservados para eles.
O cache não é utilizado nos seguintes cenários:
- O modelo tem um escopo padrão
- O modelo usa herança de tabela única
- find
com uma lista de ids, por exemplo:
```ruby
# não em cache
Post.find(1, 2, 3)
Post.find([1,2])
```
find_by
com fragmentos SQL:Post.find_by('published_at < ?', 2.weeks.ago)
2.4 Console da Web
Novas aplicações geradas com o Rails 4.2 agora vêm com a gem Web Console por padrão. O Web Console adiciona um console Ruby interativo em cada página de erro e fornece uma visualização e helpers de console.
O console interativo nas páginas de erro permite que você execute código no contexto
do local onde a exceção ocorreu. O helper console
, se chamado
em qualquer lugar em uma view ou controller, inicia um console interativo com o contexto final,
após a renderização ter sido concluída.
2.5 Suporte a Chave Estrangeira
A DSL de migração agora suporta adicionar e remover chaves estrangeiras. Elas são gravadas
no schema.rb
também. No momento, apenas os adaptadores mysql
, mysql2
e postgresql
suportam chaves estrangeiras.
# adicionar uma chave estrangeira para `articles.author_id` referenciando `authors.id`
add_foreign_key :articles, :authors
# adicionar uma chave estrangeira para `articles.author_id` referenciando `users.lng_id`
add_foreign_key :articles, :users, column: :author_id, primary_key: "lng_id"
# remover a chave estrangeira em `accounts.branch_id`
remove_foreign_key :accounts, :branches
# remover a chave estrangeira em `accounts.owner_id`
remove_foreign_key :accounts, column: :owner_id
Consulte a documentação da API em add_foreign_key e remove_foreign_key para uma descrição completa.
3 Incompatibilidades
Funcionalidades previamente depreciadas foram removidas. Consulte os componentes individuais para novas depreciações nesta versão.
As seguintes alterações podem exigir ação imediata após a atualização.
3.1 render
com um Argumento String
Anteriormente, chamar render "foo/bar"
em uma ação do controller era equivalente a
render file: "foo/bar"
. No Rails 4.2, isso foi alterado para significar
render template: "foo/bar"
. Se você precisa renderizar um arquivo, por favor
altere seu código para usar a forma explícita (render file: "foo/bar"
) em vez disso.
3.2 respond_with
/ respond_to
em Nível de Classe
respond_with
e o correspondente respond_to
em nível de classe foram movidos
para a gem responders. Adicione
gem 'responders', '~> 2.0'
ao seu Gemfile
para usá-lo:
# app/controllers/users_controller.rb
class UsersController < ApplicationController
respond_to :html, :json
def show
@user = User.find(params[:id])
respond_with @user
end
end
O respond_to
em nível de instância não é afetado:
# 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 Host Padrão para rails server
Devido a uma mudança no Rack,
o rails server
agora escuta em localhost
em vez de 0.0.0.0
por padrão. Isso
deve ter um impacto mínimo no fluxo de trabalho de desenvolvimento padrão, pois tanto
http://127.0.0.1:3000 quanto http://localhost:3000 continuarão funcionando como antes
em sua própria máquina.
No entanto, com essa alteração, você não poderá mais acessar o servidor Rails
de uma máquina diferente, por exemplo, se seu ambiente de desenvolvimento
estiver em uma máquina virtual e você desejar acessá-lo da máquina host.
Nesses casos, inicie o servidor com rails server -b 0.0.0.0
para
restaurar o comportamento anterior.
Se você fizer isso, certifique-se de configurar corretamente o firewall para que apenas máquinas confiáveis em sua rede possam acessar seu servidor de desenvolvimento.
3.4 Símbolos de opção de status alterados para render
Devido a uma mudança no Rack, os símbolos que o método render
aceita para a opção :status
foram alterados:
- 306:
:reserved
foi removido. - 413:
:request_entity_too_large
foi renomeado para:payload_too_large
. - 414:
:request_uri_too_long
foi renomeado para:uri_too_long
. - 416:
:requested_range_not_satisfiable
foi renomeado para:range_not_satisfiable
.
Lembre-se de que, ao chamar render
com um símbolo desconhecido, o status da resposta será definido como 500 por padrão.
3.5 Sanitizador de HTML
O sanitizador de HTML foi substituído por uma nova implementação mais robusta, construída com base no Loofah e no Nokogiri. O novo sanitizador é mais seguro e sua sanitização é mais poderosa e flexível.
Devido ao novo algoritmo, a saída sanitizada pode ser diferente para determinadas entradas problemáticas.
Se você tiver uma necessidade específica para a saída exata do antigo sanitizador, você pode adicionar o gem rails-deprecated_sanitizer ao Gemfile
, para ter o comportamento antigo. O gem não emite avisos de depreciação porque é opcional.
O rails-deprecated_sanitizer
será suportado apenas para o Rails 4.2; ele não será mantido para o Rails 5.0.
Veja este post no blog para mais detalhes sobre as mudanças no novo sanitizador.
3.6 assert_select
assert_select
agora é baseado no Nokogiri. Como resultado, alguns seletores anteriormente válidos agora não são suportados. Se sua aplicação estiver usando alguma dessas grafias, você precisará atualizá-las:
Valores em seletores de atributos podem precisar ser citados se contiverem caracteres não alfanuméricos.
# antes a[href=/] a[href$=/] # agora a[href="/"] a[href$="/"]
DOMs construídos a partir de uma fonte HTML contendo HTML inválido com elementos mal aninhados podem ser diferentes.
Por exemplo:
# conteúdo: <div><i><p></i></div> # antes: assert_select('div > i') # => true assert_select('div > p') # => false assert_select('i > p') # => true # agora: assert_select('div > i') # => true assert_select('div > p') # => true assert_select('i > p') # => false
Se os dados selecionados contiverem entidades, o valor selecionado para comparação costumava ser bruto (por exemplo,
AT&T
), e agora é avaliado (por exemplo,AT&T
).# conteúdo: <p>AT&T</p> # antes: assert_select('p', 'AT&T') # => true assert_select('p', 'AT&T') # => false # agora: assert_select('p', 'AT&T') # => true assert_select('p', 'AT&T') # => false
Além disso, as substituições tiveram sua sintaxe alterada.
Agora você precisa usar um seletor :match
semelhante ao CSS:
assert_select ":match('id', ?)", 'comment_1'
Além disso, as substituições de Regexp têm uma aparência diferente quando a asserção falha. Observe como /hello/
aqui:
assert_select(":match('id', ?)", /hello/)
se torna "(?-mix:hello)"
:
Esperava-se pelo menos 1 elemento correspondente a "div:match('id', "(?-mix:hello)")", encontrados 0...
Esperava-se que 0 fosse >= 1.
Consulte a documentação do Rails Dom Testing para mais informações sobre assert_select
.
4 Railties
Consulte o Changelog para obter detalhes das alterações.
4.1 Remoções
A opção
--skip-action-view
foi removida do gerador de aplicativos. (Pull Request)O comando
rails application
foi removido sem substituição. (Pull Request)
4.2 Depreciações
Configuração
config.log_level
ausente foi depreciada para ambientes de produção. (Pull Request)rake test:all
foi depreciado em favor derake test
, pois agora executa todos os testes na pastatest
. (Pull Request)rake test:all:db
foi depreciado em favor derake test:db
. (Pull Request)Rails::Rack::LogTailer
foi depreciado sem substituição. (Commit)
4.3 Mudanças notáveis
Introduzido
web-console
noGemfile
padrão da aplicação. (Pull Request)Adicionada a opção
required
ao gerador de modelo para associações. (Pull Request)Introduzido o namespace
x
para definir opções de configuração personalizadas:# config/environments/production.rb config.x.payment_processing.schedule = :daily config.x.payment_processing.retries = 3 config.x.super_debugger = true
Essas opções estão disponíveis através do objeto de configuração:
Rails.configuration.x.payment_processing.schedule # => :daily Rails.configuration.x.payment_processing.retries # => 3 Rails.configuration.x.super_debugger # => true
(Commit)
Introduzido
Rails::Application.config_for
para carregar uma configuração para o ambiente atual.# 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
Introduzida a opção
--skip-turbolinks
no gerador de aplicativos para não gerar integração com turbolinks. (Commit)Introduzido o script
bin/setup
como uma convenção para código de configuração automatizada ao inicializar uma aplicação. (Pull Request)Alterado o valor padrão de
config.assets.digest
paratrue
no desenvolvimento. (Pull Request)Introduzida uma API para registrar novas extensões para
rake notes
. (Pull Request)Introduzido um callback
after_bundle
para uso em templates do Rails. (Pull Request)Introduzido
Rails.gem_version
como um método de conveniência para retornarGem::Version.new(Rails.version)
. (Pull Request)
5 Action Pack
Consulte o Changelog para obter detalhes das mudanças.
5.1 Remoções
respond_with
e orespond_to
em nível de classe foram removidos do Rails e movidos para o gemresponders
(versão 2.0). Adicionegem 'responders', '~> 2.0'
ao seuGemfile
para continuar usando esses recursos. (Pull Request, Mais Detalhes)Removido o
AbstractController::Helpers::ClassMethods::MissingHelperError
depreciado em favor deAbstractController::Helpers::MissingHelperError
. (Commit)
5.2 Depreciações
Depreciado a opção
only_path
nos ajudantes*_path
. (Commit)Depreciado
assert_tag
,assert_no_tag
,find_tag
efind_all_tag
em favor deassert_select
. (Commit)Depreciado o suporte para definir a opção
:to
de um roteador como um símbolo ou uma string que não contém o caractere "#":get '/posts', to: MyRackApp => (Nenhuma mudança necessária) get '/posts', to: 'post#index' => (Nenhuma mudança necessária) get '/posts', to: 'posts' => get '/posts', controller: :posts get '/posts', to: :index => get '/posts', action: :index
(Commit)
Depreciado o suporte para chaves de string em ajudantes de URL:
# ruim root_path('controller' => 'posts', 'action' => 'index') # bom root_path(controller: 'posts', action: 'index')
5.3 Mudanças notáveis
O grupo de métodos
*_filter
foi removido da documentação. Seu uso é desencorajado em favor do grupo de métodos*_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
Se sua aplicação depende desses métodos, você deve usar os métodos de substituição
*_action
em vez disso. Esses métodos serão depreciados no futuro e eventualmente serão removidos do Rails.render nothing: true
ou renderizar um corponil
não adiciona mais um único espaço de preenchimento ao corpo da resposta. (Pull Request)O Rails agora inclui automaticamente o digest do template nos ETags. (Pull Request)
Os segmentos passados para os auxiliares de URL agora são automaticamente escapados. (Commit)
Introduzida a opção
always_permitted_parameters
para configurar quais parâmetros são permitidos globalmente. O valor padrão dessa configuração é['controller', 'action']
. (Pull Request)Adicionado o método HTTP
MKCALENDAR
do RFC 4791. (Pull Request)As notificações
*_fragment.action_controller
agora incluem o nome do controlador e da ação na carga útil. (Pull Request)Melhorada a página de erro de roteamento com correspondência aproximada para busca de rotas. (Pull Request)
Adicionada uma opção para desabilitar o registro de falhas de CSRF. (Pull Request)
Quando o servidor Rails está configurado para servir ativos estáticos, os ativos gzip agora serão servidos se o cliente suportar e um arquivo gzip pré-gerado (
.gz
) estiver no disco. Por padrão, o pipeline de ativos gera arquivos.gz
para todos os ativos compressíveis. Servir arquivos gzip minimiza a transferência de dados e acelera as solicitações de ativos. Sempre use um CDN se você estiver servindo ativos do seu servidor Rails em produção. (Pull Request)Ao chamar os auxiliares
process
em um teste de integração, o caminho precisa ter uma barra inicial. Anteriormente, era possível omiti-la, mas isso era um subproduto da implementação e não uma funcionalidade intencional, por exemplo:test "listar todos os posts" do get "/posts" assert_response :success end
6 Action View
Consulte o Changelog para obter detalhes das alterações.
6.1 Depreciações
Depreciado
AbstractController::Base.parent_prefixes
. Substitua porAbstractController::Base.local_prefixes
quando quiser alterar onde encontrar as visualizações. (Pull Request)Depreciado
ActionView::Digestor#digest(name, format, finder, options = {})
. Os argumentos devem ser passados como um hash em vez disso. (Pull Request)
6.2 Alterações notáveis
render "foo/bar"
agora se expande pararender template: "foo/bar"
em vez derender file: "foo/bar"
. (Pull Request)Os auxiliares de formulário não geram mais um elemento
<div>
com CSS inline ao redor dos campos ocultos. (Pull Request)Introduzida a variável local especial
#{partial_name}_iteration
para uso com partials que são renderizados com uma coleção. Ela fornece acesso ao estado atual da iteração por meio dos métodosindex
,size
,first?
elast?
. (Pull Request)O preenchimento de espaços reservados I18n segue a mesma convenção do preenchimento de
label
. (Pull Request)
7 Action Mailer
Consulte o Changelog para obter detalhes das alterações.
7.1 Depreciações
Depreciados os auxiliares
*_path
nos mailers. Sempre use os auxiliares*_url
em vez disso. (Pull Request)Depreciados
deliver
/deliver!
em favor dedeliver_now
/deliver_now!
. (Pull Request)
7.2 Alterações notáveis
link_to
eurl_for
geram URLs absolutas por padrão nos templates, não é mais necessário passaronly_path: false
. (Commit)Introduzido
deliver_later
, que enfileira um trabalho na fila da aplicação para enviar e-mails de forma assíncrona. (Pull Request)Adicionada a opção de configuração
show_previews
para habilitar visualizações de mailer fora do ambiente de desenvolvimento. (Pull Request)
8 Active Record
Consulte o Changelog para obter detalhes das alterações.
8.1 Remoções
Removido
cache_attributes
e similares. Todos os atributos são armazenados em cache. (Pull Request)Removido o método depreciado
ActiveRecord::Base.quoted_locking_column
. (Pull Request)Removido
ActiveRecord::Migrator.proper_table_name
depreciado. Use o método de instânciaproper_table_name
emActiveRecord::Migration
em vez disso. (Pull Request)Removido o tipo
:timestamp
não utilizado. Ele é agora um alias transparente para:datetime
em todos os casos. Corrige inconsistências quando os tipos de coluna são enviados para fora do Active Record, como para serialização XML. (Pull Request)Descontinuações
Descontinuado o tratamento de erros dentro de
after_commit
eafter_rollback
. (Pull Request)Descontinuado o suporte quebrado para detecção automática de contadores em cache em associações
has_many :through
. Agora você deve especificar manualmente o contador em cache nas associaçõeshas_many
ebelongs_to
para os registros intermediários. (Pull Request)Descontinuado o uso de objetos Active Record em
.find
ou.exists?
. Agora é necessário chamarid
nos objetos primeiro. (Commit 1, 2)Descontinuado o suporte incompleto para valores de intervalo do PostgreSQL com início excluído. Atualmente, mapeamos os intervalos do PostgreSQL para intervalos do Ruby. Essa conversão não é totalmente possível porque os intervalos do Ruby não suportam inícios excluídos.
A solução atual de incrementar o início não está correta e agora está descontinuada. Para subtipos em que não sabemos como incrementar (por exemplo,
succ
não está definido), será lançado umArgumentError
para intervalos com inícios excluídos. (Commit)Descontinuado o uso de
DatabaseTasks.load_schema
sem uma conexão. UseDatabaseTasks.load_schema_current
em vez disso. (Commit)Descontinuado o uso de
sanitize_sql_hash_for_conditions
sem substituição. O uso de umaRelation
para realizar consultas e atualizações é a API preferida. (Commit)Descontinuado o uso de
add_timestamps
et.timestamps
sem passar a opção:null
. O padrãonull: true
será alterado paranull: false
no Rails 5. (Pull Request)Descontinuado o uso de
Reflection#source_macro
sem substituição, pois não é mais necessário no Active Record. (Pull Request)Descontinuado o uso de
serialized_attributes
sem substituição. (Pull Request)Descontinuado o retorno de
nil
decolumn_for_attribute
quando não existe uma coluna. A partir do Rails 5.0, será retornado um objeto nulo. (Pull Request)Descontinuado o uso de
.joins
,.preload
e.eager_load
com associações que dependem do estado da instância (ou seja, aquelas definidas com um escopo que recebe um argumento) sem substituição. (Commit)
8.2 Mudanças notáveis
SchemaDumper
usaforce: :cascade
emcreate_table
. Isso permite recarregar um esquema quando as chaves estrangeiras estão em vigor.Adicionada a opção
:required
para associações singulares, que define uma validação de presença na associação. (Pull Request)ActiveRecord::Dirty
agora detecta alterações em valores mutáveis feitas no local. Atributos serializados em modelos Active Record não são mais salvos quando não são alterados. Isso também funciona com outros tipos, como colunas de string e colunas json no PostgreSQL. (Pull Requests 1, 2, 3)Introduzida a tarefa Rake
db:purge
para esvaziar o banco de dados do ambiente atual. (Commit)Introduzido
ActiveRecord::Base#validate!
que lançaActiveRecord::RecordInvalid
se o registro for inválido. (Pull Request)Introduzido
validate
como um alias paravalid?
. (Pull Request)touch
agora aceita vários atributos para serem atualizados de uma vez. (Pull Request)O adaptador PostgreSQL agora suporta o tipo de dados
jsonb
no PostgreSQL 9.4+. (Pull Request)Os adaptadores PostgreSQL e SQLite não adicionam mais um limite padrão de 255 caracteres em colunas de string. (Pull Request)
Adicionado suporte para o tipo de coluna
citext
no adaptador PostgreSQL. (Pull Request)Adicionado suporte para tipos de intervalo criados pelo usuário no adaptador PostgreSQL. (Commit)
sqlite3:///algum/caminho
agora é resolvido para o caminho absoluto do sistema/algum/caminho
. Para caminhos relativos, usesqlite3:some/path
em vez disso. (Anteriormente,sqlite3:///algum/caminho
era resolvido para o caminho relativosome/path
. Esse comportamento foi descontinuado no Rails 4.1). (Pull Request)Adicionado suporte para segundos fracionários para o MySQL 5.6 e superior. (Pull Request 1, 2)
Adicionado
ActiveRecord::Base#pretty_print
para imprimir modelos de forma legível. (Pull Request)ActiveRecord::Base#reload
agora se comporta da mesma forma quem = Model.find(m.id)
, o que significa que não mantém mais os atributos extras deSELECT
s personalizados. (Pull Request)ActiveRecord::Base#reflections
agora retorna um hash com chaves de string em vez de chaves de símbolo. (Pull Request)O método
references
nas migrações agora suporta uma opçãotype
para especificar o tipo da chave estrangeira (por exemplo,:uuid
). (Pull Request)
9 Active Model
Consulte o Changelog para obter detalhes sobre as alterações.
9.1 Remoções
- Removido
Validator#setup
obsoleto sem substituição. (Pull Request)
9.2 Depreciações
Obsoleto
reset_#{attribute}
em favor derestore_#{attribute}
. (Pull Request)Obsoleto
ActiveModel::Dirty#reset_changes
em favor declear_changes_information
. (Pull Request)
9.3 Alterações notáveis
Introduzido
validate
como um alias paravalid?
. (Pull Request)Introduziu o método
restore_attributes
emActiveModel::Dirty
para restaurar os atributos alterados (sujos) para seus valores anteriores. (Pull Request 1, 2)has_secure_password
não impede mais senhas em branco (ou seja, senhas que contêm apenas espaços) por padrão. (Pull Request)has_secure_password
agora verifica se a senha fornecida tem menos de 72 caracteres se as validações estiverem habilitadas. (Pull Request)
10 Active Support
Consulte o Changelog para obter detalhes sobre as alterações.
10.1 Remoções
Removido
Numeric#ago
,Numeric#until
,Numeric#since
,Numeric#from_now
obsoletos. (Commit)Removidos terminadores baseados em string obsoletos para
ActiveSupport::Callbacks
. (Pull Request)
10.2 Depreciações
Obsoleto
Kernel#silence_stderr
,Kernel#capture
eKernel#quietly
sem substituição. (Pull Request)Obsoleto
Class#superclass_delegating_accessor
, useClass#class_attribute
em vez disso. (Pull Request)Obsoleto
ActiveSupport::SafeBuffer#prepend!
comoActiveSupport::SafeBuffer#prepend
agora realiza a mesma função. (Pull Request)
10.3 Alterações notáveis
Introduzida uma nova opção de configuração
active_support.test_order
para especificar a ordem em que os casos de teste são executados. Esta opção atualmente tem o valor padrão:sorted
, mas será alterada para:random
no Rails 5.0. (Commit)Object#try
eObject#try!
agora podem ser usados sem um receptor explícito no bloco. (Commit, Pull Request)O auxiliar de teste
travel_to
agora trunca o componenteusec
para 0. (Commit)Introduzido
Object#itself
como uma função de identidade. (Commit 1, 2)Object#with_options
agora pode ser usado sem um receptor explícito no bloco. (Pull Request)Introduzido
String#truncate_words
para truncar uma string por um número de palavras. (Pull Request)Adicionado
Hash#transform_values
eHash#transform_values!
para simplificar um padrão comum em que os valores de um hash devem ser alterados, mas as chaves são mantidas as mesmas. (Pull Request)O auxiliar de inflexão
humanize
agora remove quaisquer sublinhados iniciais. (Commit)Introduzido
Concern#class_methods
como uma alternativa paramodule ClassMethods
, bem comoKernel#concern
para evitar o boilerplatemodule Foo; extend ActiveSupport::Concern; end
. (Commit)Novo guia sobre carregamento automático e recarregamento de constantes.
11 Créditos
Consulte a lista completa de contribuidores para o Rails para as muitas pessoas que passaram muitas horas tornando o Rails o framework estável e robusto que é hoje. 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.