Como você já deve saber, há um grave problema de segurança nas versões Rails anteriores a 3.2.11, 3.1.10, 3.0.19 e 2.3.15.
- Múltiplas vulnerabilidades na análise de parâmetros no Action Pack
- Risco de geração de consulta insegura em Ruby on Rails
Se você está executando o Rails 3.2.8 ou inferior, e ainda não adicionou inverse_of ao seu ActiverRecord :: Associations , você pode estar em um grande monte de mudanças antes da atualização.
Atualizando automaticamente seus modelos
Criei um pequeno script para atualizar seus modelos. Não é tão bonito, mas faz o que é esperado: atualiza as associações has_many e belongs_to com a cláusula inverse_of correta .
add_inverse_of.rb
#!/usr/bin/env ruby
require 'active_support/inflector'
Dir.glob("#{Dir.pwd}/*.rb") do |file|
basename = File.basename(file, ".rb")
lines = IO.readlines(file).map do |line|
if line.match(/(belongs_to|has_many (((?!through)(?!inverse_of).)*)$)/)
line.sub(/has_many ([^n]*)/){|m| "has_many #{$1}, inverse_of: :#{basename}"}.sub(/belongs_to ([^n]*)/){|m| "belongs_to #{$1}, inverse_of: :#{basename.pluralize}"}
else
line
end
end
File.open(file, 'w') do |file|
file.puts lines
end
end
É muito simples de usar. Se você tiver Rails instalado em seu ambiente RVM , basta executar o seguinte na raiz de seu aplicativo Rails:
$ cd app/models
$ ruby <location of the script>/add_inverse_of.rb
Se você tiver um ambiente Ruby limpo, pode ser necessário executar $ bundle exec ruby add_inverse_of.rb
Corrigindo outros problemas
Você pode não ter criado todas as associações de seu modelo como bidirecionais em primeiro lugar, já que as versões anteriores do Rails não o forçavam. Este é um bom momento para corrigir a consistência de seu aplicativo e verificar suas fábricas e especificações (ou qualquer outra combinação de acessórios e testes) para verificar se seu aplicativo ainda funciona conforme o esperado.