edge
Mais em rubyonrails.org: Mais Ruby on Rails

Notas de lançamento do Ruby on Rails 5.2

Destaques do Rails 5.2:

Estas notas de lançamento abordam apenas as principais mudanças. Para saber sobre várias correções de bugs e mudanças, consulte os registros de alterações ou verifique a lista de commits no repositório principal do Rails no GitHub.

1 Atualizando para o Rails 5.2

Se você está atualizando um aplicativo existente, é uma ótima ideia ter uma boa cobertura de testes antes de prosseguir. Você também deve primeiro atualizar para o Rails 5.1, caso ainda não tenha feito isso, e garantir que seu aplicativo ainda funcione conforme o esperado antes de tentar atualizar para o Rails 5.2. Uma lista de coisas a serem observadas ao atualizar está disponível no guia Atualizando o Ruby on Rails.

2 Recursos Principais

2.1 Active Storage

Pull Request

Active Storage facilita o upload de arquivos para um serviço de armazenamento em nuvem como Amazon S3, Google Cloud Storage ou Microsoft Azure Storage e a anexação desses arquivos a objetos Active Record. Ele vem com um serviço baseado em disco local para desenvolvimento e teste e suporta espelhamento de arquivos para serviços subordinados para backups e migrações. Você pode ler mais sobre o Active Storage no guia Visão Geral do Active Storage.

2.2 Redis Cache Store

Pull Request

O Rails 5.2 vem com o Redis cache store integrado. Você pode ler mais sobre isso no guia Cache com Rails: Uma Visão Geral.

2.3 HTTP/2 Early Hints

Pull Request

O Rails 5.2 suporta HTTP/2 Early Hints. Para iniciar o servidor com Early Hints habilitado, passe --early-hints para bin/rails server.

2.4 Credentials

Pull Request

Adicionado o arquivo config/credentials.yml.enc para armazenar segredos do aplicativo de produção. Isso permite salvar quaisquer credenciais de autenticação para serviços de terceiros diretamente no repositório, criptografadas com uma chave no arquivo config/master.key ou na variável de ambiente RAILS_MASTER_KEY. Isso eventualmente substituirá Rails.application.secrets e os segredos criptografados introduzidos no Rails 5.1. Além disso, o Rails 5.2 abre a API subjacente das Credentials, para que você possa lidar facilmente com outras configurações, chaves e arquivos criptografados. Você pode ler mais sobre isso no guia Protegendo Aplicações Rails.

2.5 Política de Segurança de Conteúdo

Solicitação de Pull

O Rails 5.2 vem com uma nova DSL que permite configurar uma Política de Segurança de Conteúdo para sua aplicação. Você pode configurar uma política padrão global e, em seguida, substituí-la em uma base por recurso e até mesmo usar lambdas para injetar valores por solicitação no cabeçalho, como subdomínios de conta em uma aplicação multi-inquilino. Você pode ler mais sobre isso no guia Securing Rails Applications.

3 Railties

Consulte o Changelog para obter alterações detalhadas.

3.1 Descontinuações

  • Descontinuar o método capify! em geradores e modelos. (Solicitação de Pull)

  • Passar o nome do ambiente como um argumento regular para os comandos rails dbconsole e rails console está descontinuado. A opção -e deve ser usada em seu lugar. (Commit)

  • Descontinuar o uso de subclasses de Rails::Application para iniciar o servidor Rails. (Solicitação de Pull)

  • Descontinuar o callback after_bundle em modelos de plugins do Rails. (Solicitação de Pull)

3.2 Mudanças notáveis

  • Adicionada uma seção compartilhada ao config/database.yml que será carregada para todos os ambientes. (Solicitação de Pull)

  • Adicionar railtie.rb ao gerador de plugins. (Solicitação de Pull)

  • Limpar arquivos de captura de tela na tarefa tmp:clear. (Solicitação de Pull)

  • Ignorar componentes não utilizados ao executar bin/rails app:update. Se a geração inicial do aplicativo ignorou o Action Cable, Active Record, etc., a tarefa de atualização também respeita essas exclusões. (Solicitação de Pull)

  • Permitir passar um nome de conexão personalizado para o comando rails dbconsole ao usar uma configuração de banco de dados de 3 níveis. Exemplo: bin/rails dbconsole -c replica. (Commit)

  • Expandir corretamente atalhos para o nome do ambiente ao executar os comandos console e dbconsole. (Commit)

  • Adicionar bootsnap ao Gemfile padrão. (Solicitação de Pull)

  • Suportar - como uma forma independente de plataforma para executar um script a partir da entrada padrão com rails runner. (Solicitação de Pull)

  • Adicionar a versão ruby x.x.x ao Gemfile e criar o arquivo .ruby-version na raiz contendo a versão atual do Ruby quando novas aplicações Rails são criadas. (Solicitação de Pull)

  • Adicionar a opção --skip-action-cable ao gerador de plugins. (Solicitação de Pull)

  • Adicione git_source ao Gemfile para o gerador de plugins. (Pull Request)

  • Pule componentes não utilizados ao executar bin/rails em um plugin do Rails. (Commit)

  • Otimize a indentação para ações do gerador. (Pull Request)

  • Otimize a indentação das rotas. (Pull Request)

  • Adicione a opção --skip-yarn ao gerador de plugins. (Pull Request)

  • Suporte a múltiplos argumentos de versão para o método gem dos Geradores. (Pull Request)

  • Derive secret_key_base do nome do aplicativo nos ambientes de desenvolvimento e teste. (Pull Request)

  • Adicione mini_magick ao Gemfile padrão como comentário. (Pull Request)

  • rails new e rails plugin new obtêm Active Storage por padrão. Adicione a capacidade de pular o Active Storage com --skip-active-storage e faça isso automaticamente quando --skip-active-record for usado. (Pull Request)

4 Action Cable

Consulte o Changelog para obter alterações detalhadas.

4.1 Remoções

  • Removido adaptador de redis com eventos obsoletos. (Commit)

4.2 Mudanças notáveis

  • Adicione suporte às opções host, port, db e password em cable.yml (Pull Request)

  • Hash identificadores longos de stream ao usar o adaptador PostgreSQL. (Pull Request)

5 Action Pack

Consulte o Changelog para obter alterações detalhadas.

5.1 Remoções

  • Remova ActionController::ParamsParser::ParseError obsoleto. (Commit)

5.2 Depreciações

  • Deprecie os aliases #success?, #missing? e #error? de ActionDispatch::TestResponse. (Pull Request)

5.3 Mudanças notáveis

  • Adicione suporte a chaves de cache recicláveis com cache de fragmentos. (Pull Request)

  • Altere o formato da chave de cache para fragmentos para facilitar a depuração da chave. (Pull Request)

  • Cookies e sessões criptografados AEAD com GCM. (Pull Request)

  • Proteja contra falsificação por padrão. (Pull Request)

  • Expiração de cookies e sessões assinados/criptografados no lado do servidor. (Pull Request)

  • A opção :expires dos cookies suporta objetos ActiveSupport::Duration. (Pull Request)

  • Use a configuração do servidor :puma registrado no Capybara. (Pull Request)

  • Simplifique o middleware de cookies com suporte à rotação de chaves. (Pull Request)

  • Adicione a capacidade de habilitar Early Hints para HTTP/2. (Pull Request)

  • Adicione suporte ao chrome headless aos Testes de Sistema. (Pull Request)

  • Adicione a opção :allow_other_host ao método redirect_back. (Pull Request)

  • Faça assert_recognizes percorrer engines montados. (Pull Request)

  • Adicione DSL para configurar o cabeçalho Content-Security-Policy. (Pull Request, Commit, Commit)

  • Registre os tipos MIME de áudio/vídeo/fonte mais populares suportados pelos navegadores modernos. (Pull Request)

  • Altere a saída padrão de captura de tela dos testes de sistema de inline para simple. (Commit)

  • Adicione suporte ao Firefox sem interface gráfica aos testes de sistema. (Pull Request)

  • Adicione X-Download-Options seguro e X-Permitted-Cross-Domain-Policies aos cabeçalhos padrão. (Commit)

  • Altere os testes de sistema para definir o Puma como servidor padrão apenas quando o usuário não especificar manualmente outro servidor. (Pull Request)

  • Adicione o cabeçalho Referrer-Policy aos cabeçalhos padrão. (Commit)

  • Iguala o comportamento de Hash#each em ActionController::Parameters#each. (Pull Request)

  • Adicione suporte para geração automática de nonce para o Rails UJS. (Commit)

  • Atualize o valor padrão de max-age do HSTS para 31536000 segundos (1 ano) para atender ao requisito mínimo de max-age para https://hstspreload.org/. (Commit)

  • Adicione o método de alias to_hash para to_h para cookies. Adicione o método de alias to_h para to_hash para session. (Commit)

6 Action View

Consulte o Changelog para obter detalhes das alterações.

6.1 Remoções

  • Remova o manipulador ERB Erubis obsoleto. (Commit)

6.2 Depreciações

  • Deprecie o auxiliar image_alt que costumava adicionar texto alt padrão às imagens geradas por image_tag. (Pull Request)

6.3 Mudanças notáveis

  • Adicione o tipo :json ao auto_discovery_link_tag para suportar JSON Feeds. (Pull Request)

  • Adicione a opção srcset ao auxiliar image_tag. (Pull Request)

  • Corrija problemas com field_error_proc envolvendo optgroup e option de divisão de seleção. (Pull Request)

  • Altere form_with para gerar ids por padrão. (Commit)

  • Adicione o auxiliar preload_link_tag. (Pull Request)

  • Permita o uso de objetos chamáveis como métodos de grupo para seleções agrupadas. (Pull Request)

7 Action Mailer

Consulte o Changelog para obter detalhes das alterações.

7.1 Mudanças notáveis

  • Permita que as classes do Action Mailer configurem seu trabalho de entrega. (Pull Request)

  • Adicione o auxiliar de teste assert_enqueued_email_with. (Pull Request)

8 Active Record

Consulte o Changelog para obter detalhes das alterações.

8.1 Remoções

  • Remova #migration_keys obsoleta. (Pull Request)

  • Remova o suporte obsoleto a quoted_id ao converter o tipo de um objeto Active Record. (Commit)

  • Remova o argumento obsoleto default de index_name_exists?. (Commit)

  • Remova o suporte obsoleto ao passar uma classe para :class_name em associações. (Commit)

  • Remova os métodos obsoletos initialize_schema_migrations_table e initialize_internal_metadata_table. (Commit)

  • Remova o método obsoleto supports_migrations?. (Commit)

  • Remova o método obsoleto supports_primary_key?. (Commit)

  • Remova o método obsoleto ActiveRecord::Migrator.schema_migrations_table_name. (Commit)

  • Remova o argumento obsoleto name de #indexes. (Commit)

  • Remova os argumentos obsoletos de #verify!. (Commit)

  • Remova a configuração obsoleta .error_on_ignored_order_or_limit. (Commit)

  • Remova o método obsoleto #scope_chain. (Commit)

  • Remova o método obsoleto #sanitize_conditions. (Commit)

8.2 Depreciações

  • Deprecie supports_statement_cache?. (Pull Request)

  • Deprecie a passagem de argumentos e bloco ao mesmo tempo para count e sum em ActiveRecord::Calculations. (Pull Request)

  • Deprecie a delegação para arel em Relation. (Pull Request)

  • Deprecie o método set_state em TransactionState. (Commit)

  • Deprecie o método expand_hash_conditions_for_aggregates sem substituição. (Commit)

8.3 Mudanças notáveis

  • Ao chamar o método de acesso dinâmico ao fixture sem argumentos, agora ele retorna todos os fixtures desse tipo. Anteriormente, esse método sempre retornava um array vazio. (Pull Request)

  • Corrija a inconsistência com atributos alterados ao substituir o leitor de atributos do Active Record. (Pull Request)

  • Suporte a índices descendentes para o MySQL. (Pull Request)

  • Corrija a primeira migração do bin/rails db:forward. (Commit)

  • Gere um erro UnknownMigrationVersionError ao mover migrações quando a migração atual não existe. (Commit)

  • Respeite SchemaDumper.ignore_tables nas tarefas do rake para o dump da estrutura do banco de dados. (Pull Request)

  • Adicione ActiveRecord::Base#cache_version para suportar chaves de cache recicláveis através das novas entradas versionadas em ActiveSupport::Cache. Isso também significa que ActiveRecord::Base#cache_key agora retornará uma chave estável que não inclui mais um carimbo de data e hora. (Pull Request)

  • Evite a criação de parâmetros de ligação se o valor convertido for nulo. (Pull Request)

  • Use o INSERT em massa para inserir fixtures para melhor desempenho. (Pull Request)

  • A fusão de duas relações que representam junções aninhadas não transforma mais as junções da relação fundida em LEFT OUTER JOIN. (Pull Request)

  • Corrigir transações para aplicar estado às transações filhas. Anteriormente, se você tivesse uma transação aninhada e a transação externa fosse revertida, o registro da transação interna ainda seria marcado como persistente. Isso foi corrigido aplicando o estado da transação pai à transação filha quando a transação pai é revertida. Isso marcará corretamente os registros da transação interna como não persistente. (Commit)

  • Corrigir carregamento antecipado/precarregamento de associação com escopo incluindo junções. (Pull Request)

  • Impedir que erros gerados por assinantes de notificações sql.active_record sejam convertidos em exceções ActiveRecord::StatementInvalid. (Pull Request)

  • Ignorar o cache de consultas ao trabalhar com lotes de registros (find_each, find_in_batches, in_batches). (Commit)

  • Alterar a serialização booleana do sqlite3 para usar 1 e 0. O SQLite reconhece nativamente 1 e 0 como verdadeiro e falso, mas não reconhece nativamente 't' e 'f' como era serializado anteriormente. (Pull Request)

  • Os valores construídos usando atribuição de vários parâmetros agora usarão o valor pós-cast para renderização em campos de formulário de único campo. (Commit)

  • ApplicationRecord não é mais gerado ao gerar modelos. Se você precisar gerá-lo, ele pode ser criado com rails g application_record. (Pull Request)

  • Relation#or agora aceita duas relações que têm valores diferentes para references apenas, pois references pode ser chamado implicitamente por where. (Commit)

  • Ao usar Relation#or, extrair as condições comuns e colocá-las antes da condição OR. (Pull Request)

  • Adicionar o método auxiliar de fixture binary. (Pull Request)

  • Adivinhar automaticamente as associações inversas para STI. (Pull Request)

  • Adicionar nova classe de erro LockWaitTimeout que será levantada quando o tempo limite de espera do bloqueio for excedido. (Pull Request)

  • Atualizar os nomes dos payloads para a instrumentação sql.active_record para serem mais descritivos. (Pull Request)

  • Usar o algoritmo fornecido ao remover o índice do banco de dados. (Pull Request)

  • Passar um Set para Relation#where agora se comporta da mesma forma que passar um array. (Commit)

  • O tsrange do PostgreSQL agora preserva a precisão de subsegundos. (Pull Request)

  • Gera um erro ao chamar lock! em um registro sujo. (Commit)

  • Corrigido um bug onde a ordem das colunas para um índice não era escrita em db/schema.rb ao usar o adaptador SQLite. (Pull Request)

  • Corrigir bin/rails db:migrate com VERSION especificado. bin/rails db:migrate com VERSION vazio se comporta como sem VERSION. Verificar o formato de VERSION: Permitir um número de versão de migração ou nome de um arquivo de migração. Gerar erro se o formato de VERSION for inválido. Gerar erro se a migração de destino não existir. (Pull Request)

  • Adicionar nova classe de erro StatementTimeout que será gerada quando o tempo limite da declaração for excedido. (Pull Request)

  • update_all agora passará seus valores para Type#cast antes de passá-los para Type#serialize. Isso significa que update_all(foo: 'true') irá persistir corretamente um booleano. (Commit)

  • Exigir que fragmentos de SQL brutos sejam marcados explicitamente quando usados em métodos de consulta de relação. (Commit, Commit)

  • Adicionar #up_only às migrações de banco de dados para código que é relevante apenas ao migrar para cima, por exemplo, popular uma nova coluna. (Pull Request)

  • Adicionar nova classe de erro QueryCanceled que será gerada ao cancelar a declaração devido a uma solicitação do usuário. (Pull Request)

  • Não permitir que escopos sejam definidos em conflito com métodos de instância em Relation. (Pull Request)

  • Adicionar suporte para classes de operadores do PostgreSQL ao add_index. (Pull Request)

  • Registrar os chamadores das consultas do banco de dados. (Pull Request, Pull Request, Pull Request)

  • Desdefinir métodos de atributo nos descendentes ao redefinir informações de coluna. (Pull Request)

  • Usar subseleção para delete_all com limit ou offset. (Commit)

  • Corrigida inconsistência com first(n) quando usado com limit(). O localizador first(n) agora respeita o limit(), tornando-o consistente com relation.to_a.first(n), e também com o comportamento de last(n). (Pull Request)

  • Corrigir associações aninhadas has_many :through em instâncias pai não persistidas. (Commit)

  • Levar em consideração as condições de associação ao excluir registros. (Commit)

  • Não permitir a mutação de objetos destruídos após a chamada de save ou save!. (Commit)

  • Corrigir problema de mesclagem de relação com left_outer_joins. (Pull Request)

  • Suporte para tabelas estrangeiras do PostgreSQL. (Pull Request)

  • Limpar o estado da transação quando um objeto Active Record é duplicado. (Pull Request)

  • Corrigir problema de não expansão ao passar um objeto Array como argumento para o método where usando coluna composed_of. (Pull Request)

  • Fazer reflection.klass lançar uma exceção se polymorphic? não for usado corretamente. (Commit)

  • Corrigir #columns_for_distinct do MySQL e PostgreSQL para fazer ActiveRecord::FinderMethods#limited_ids_for usar os valores corretos da chave primária mesmo se as colunas ORDER BY incluírem a chave primária de outra tabela. (Commit)

  • Corrigir problema de dependent: :destroy para relacionamento has_one/belongs_to onde a classe pai estava sendo excluída quando o filho não estava. (Commit)

  • Conexões inativas do banco de dados (anteriormente apenas conexões órfãs) agora são periodicamente removidas pelo coletor de conexões do pool de conexões. (Commit)

9 Active Model

Consulte o Changelog para obter detalhes das alterações.

9.1 Alterações notáveis

  • Corrigir os métodos #keys, #values em ActiveModel::Errors. Alterar #keys para retornar apenas as chaves que não possuem mensagens vazias. Alterar #values para retornar apenas os valores não vazios. (Pull Request)

  • Adicionar o método #merge! para ActiveModel::Errors. (Pull Request)

  • Permitir passar um Proc ou Symbol para as opções do validador de comprimento. (Pull Request)

  • Executar a validação do ConfirmationValidator quando o valor de _confirmation for false. (Pull Request)

  • Modelos que usam a API de atributos com um valor padrão de proc agora podem ser serializados. (Commit)

  • Não perder todas as múltiplas :includes com opções na serialização. (Commit)

10 Active Support

Consulte o Changelog para obter detalhes das alterações.

10.1 Remoções

  • Remover o filtro de string :if e :unless depreciado para callbacks. (Commit)

  • Remover a opção halt_callback_chains_on_return_false depreciada. (Commit)

10.2 Depreciações

  • Depreciar o método Module#reachable?. (Pull Request)

  • Depreciar secrets.secret_token. (Commit)

10.3 Alterações notáveis

  • Adicionar fetch_values para HashWithIndifferentAccess. (Pull Request)
  • Adicionar suporte para :offset ao método Time#change. (Commit)

  • Adicionar suporte para :offset e :zone ao método ActiveSupport::TimeWithZone#change. (Commit)

  • Passar o nome da gem e o horizonte de depreciação para as notificações de depreciação. (Pull Request)

  • Adicionar suporte para entradas de cache versionadas. Isso permite que os armazenamentos de cache reciclem as chaves de cache, economizando muito espaço de armazenamento em casos com churn frequente. Funciona em conjunto com a separação de #cache_key e #cache_version no Active Record e seu uso no fragment caching do Action Pack. (Pull Request)

  • Adicionar ActiveSupport::CurrentAttributes para fornecer um singleton de atributos isolados por thread. O caso de uso principal é manter todos os atributos por solicitação facilmente disponíveis para todo o sistema. (Pull Request)

  • #singularize e #pluralize agora respeitam os incontáveis para o local especificado. (Commit)

  • Adicionar opção padrão para class_attribute. (Pull Request)

  • Adicionar Date#prev_occurring e Date#next_occurring para retornar o próximo/último dia da semana especificado. (Pull Request)

  • Adicionar opção padrão para acessores de atributos de módulo e classe. (Pull Request)

  • Cache: write_multi. (Pull Request)

  • Definir o ActiveSupport::MessageEncryptor para usar criptografia AES 256 GCM por padrão. (Pull Request)

  • Adicionar helper freeze_time que congela o tempo em Time.now nos testes. (Pull Request)

  • Tornar a ordem de Hash#reverse_merge! consistente com HashWithIndifferentAccess. (Pull Request)

  • Adicionar suporte a propósito e expiração para ActiveSupport::MessageVerifier e ActiveSupport::MessageEncryptor. (Pull Request)

  • Atualizar String#camelize para fornecer feedback quando uma opção incorreta é passada. (Pull Request)

  • Module#delegate_missing_to agora levanta DelegationError se o alvo for nulo, semelhante a Module#delegate. (Pull Request)

  • Adicionar ActiveSupport::EncryptedFile e ActiveSupport::EncryptedConfiguration. (Pull Request)

  • Adicionar config/credentials.yml.enc para armazenar segredos de aplicativos de produção. (Pull Request)

  • Adicionar suporte a rotação de chaves para MessageEncryptor e MessageVerifier. (Pull Request)

  • Retornar uma instância de HashWithIndifferentAccess de HashWithIndifferentAccess#transform_keys. (Pull Request)

  • Hash#slice agora usa a definição nativa do Ruby 2.5+ se definida. (Commit)

  • IO#to_json agora retorna a representação de to_s, em vez de tentar converter para um array. Isso corrige um bug onde IO#to_json lançaria um IOError quando chamado em um objeto não legível. (Pull Request)

  • Adicione a mesma assinatura de método para Time#prev_day e Time#next_day de acordo com Date#prev_day, Date#next_day. Permite passar argumento para Time#prev_day e Time#next_day. (Commit)

  • Adicione a mesma assinatura de método para Time#prev_month e Time#next_month de acordo com Date#prev_month, Date#next_month. Permite passar argumento para Time#prev_month e Time#next_month. (Commit)

  • Adicione a mesma assinatura de método para Time#prev_year e Time#next_year de acordo com Date#prev_year, Date#next_year. Permite passar argumento para Time#prev_year e Time#next_year. (Commit)

  • Corrija o suporte a siglas em humanize. (Commit)

  • Permita Range#include? em intervalos de TWZ. (Pull Request)

  • Cache: Ative a compressão por padrão para valores > 1kB. (Pull Request)

  • Armazenamento de cache Redis. (Pull Request, Pull Request)

  • Trate erros de TZInfo::AmbiguousTime. (Pull Request)

  • MemCacheStore: Suporte a expiração de contadores. (Commit)

  • Faça ActiveSupport::TimeZone.all retornar apenas fusos horários que estão em ActiveSupport::TimeZone::MAPPING. (Pull Request)

  • Alterado o comportamento padrão de ActiveSupport::SecurityUtils.secure_compare, para não vazar informações de comprimento mesmo para strings de comprimento variável. Renomeado o antigo ActiveSupport::SecurityUtils.secure_compare para fixed_length_secure_compare, e começou a lançar ArgumentError em caso de incompatibilidade de comprimento das strings passadas. (Pull Request)

  • Use SHA-1 para gerar resumos não sensíveis, como o cabeçalho ETag. (Pull Request, Pull Request)

  • assert_changes sempre irá verificar se a expressão muda, independentemente das combinações de argumentos from: e to:. (Pull Request)

  • Adicione instrumentação ausente para read_multi em ActiveSupport::Cache::Store. (Pull Request)

  • Suporte a hash como primeiro argumento em assert_difference. Isso permite especificar várias diferenças numéricas na mesma asserção. (Pull Request)

  • Caching: Aceleração de read_multi e fetch_multi do MemCache e Redis. Leia do cache local em memória antes de consultar o backend. (Commit)

11 Active Job

Consulte o Changelog para obter detalhes das alterações.

11.1 Alterações notáveis

  • Permita que um bloco seja passado para ActiveJob::Base.discard_on para permitir manipulação personalizada de descarte de jobs. (Pull Request)

12 Ruby on Rails Guides

Consulte o Changelog para obter detalhes das alterações.

12.1 Alterações notáveis

13 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.