Pergunta

Estou adicionando uma nova coluna, summary, para uma tabela existente. Ele conterá um trecho de texto simples do HTML da coluna body.

Quero criar resumos para todos os e -mails existentes quando executar minha migração. No entanto, não consigo descobrir como usar Strip_tags na minha migração.

Aqui está o que tenho até agora:

class AddSummaryToEmails < ActiveRecord::Migration
  self.up
    add_column :emails, :summary, :string, :limit => 100

    Email.reset_column_information
    Emails.all.each do |email|
      email.update_attributes(:summary => strip_tags(email.body))
    end
  end

  ...

end

Claro, isso não funciona:undefined method 'strip_tags' for #<ActiveRecord::ConnectionAdapters::MysqlAdapter:0xb6e29be8>

Como posso acessar o método Strip_tags dentro da minha migração? Sei que posso executar um regexp ou outra solução alternativa, mas ainda estou ansioso para descobrir como fazer isso para uso futuro.

Obrigado

Foi útil?

Solução

Desde strip_tags é um método ActionView e sua migração herda do ActiveRecord, ele não pode ver os métodos do ActionView.

Você pode chegar até eles desta maneira:

def self.up
  ActionController::Base.helpers.strip_tags("<b>TEST</b>")
end

Se você tentar incluir a variante ActionView, você receberá undefined method 'full_sanitizer' Porque você precisa estender os métodos de classe e assim por diante. Muito mais dor.

Outras dicas

Porque Strip_tags está fora de escopo. Você não tem acesso ao ActionView :: HELHERS :: SanitizeHelper. Ver Pergunta relacionada

WesgarrisonA solução não funcionou para mim com a versão Rails 2.3.5; portanto, para fazê -lo funcionar, tive que chamar diretamente o método HTML de higienizar do módulo HTML :: FullSanitizer na migração como esta:

def self.up
  HTML::FullSanitizer.new.sanitize('<p>Test</p>')
end

Espero que isso ajude alguém que tenha o mesmo problema que eu.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top