Problema de concepto para enviar mails


#1

Hola,

Mi objetivo es crear un formulario de contacto y se envíe
automáticamente por email.

Le he echado un vistazo las guías de rails pero no encuentro una manera
de validar los campos del formulario.

Veréis, tengo un controlador llamado contacto con un método llamado
sendmail. en la vista tengo un formulario cuya acción recae sobre el
método sendmail.

contacto_controller:

def sendmail
Emailer.deliver_contact
return if request.xhr?
render :text => ‘Message sent successfully’
end

y como podeis observar hago uso de la clase Emailer < ActionMailer::Base
cuyo archivo model contiene:

def contact
recipients “removed_email_address@domain.invalid”
from “removed_email_address@domain.invalid”
subject “Contacto desde la web”
sent_on Time.now
end

El email se envía pero quería saber si hay alguna manera de validar los
campos del formulario al igual que se hace en activerecord con
validates_presence_of (esto no funciona en activemailer). Tampoco
funciona la opción de crear un before_filter.

Lo dicho, tengo un fallo de conceptos. a ver si alguien me puede
despejar dudas alr especto.


#2

Para estas cuestiones es muy popular usar la técnica “tableless”[1]
y/o hacerlo en
cliente con LiveValidation[2].

Mucha suerte.

[1] http://codetunes.com/2008/07/20/tableless-models-in-rails/
[2] http://github.com/porras/livevalidation/tree/master

  • Juan

2009/5/19 Js Ponja removed_email_address@domain.invalid


#3

Js Ponja wrote:

Hola,

Mi objetivo es crear un formulario de contacto y se envíe
automáticamente por email.

Le he echado un vistazo las guías de rails pero no encuentro una manera
de validar los campos del formulario.

Veréis, tengo un controlador llamado contacto con un método llamado
sendmail. en la vista tengo un formulario cuya acción recae sobre el
método sendmail.

contacto_controller:

def sendmail
Emailer.deliver_contact
return if request.xhr?
render :text => ‘Message sent successfully’
end

y como podeis observar hago uso de la clase Emailer < ActionMailer::Base
cuyo archivo model contiene:

def contact
recipients “removed_email_address@domain.invalid”
from “removed_email_address@domain.invalid”
subject “Contacto desde la web”
sent_on Time.now
end

El email se envía pero quería saber si hay alguna manera de validar los
campos del formulario al igual que se hace en activerecord con
validates_presence_of (esto no funciona en activemailer). Tampoco
funciona la opción de crear un before_filter.

Lo dicho, tengo un fallo de conceptos. a ver si alguien me puede
despejar dudas alr especto.

Siempre puedes crearte un metodo que evalue si los campos estan
rellenados

def sendmail
evalua_campos if params[:cuestionario]==true

Emailer.deliver_contact
return if request.xhr?
render :text => 'Message sent successfully'

end

def evalua_campos
if params[:cuestionario][:primer_parametro].blank?

elsif…
elsif…
redirect_to …
end

Ves mirando todos los campos. Si alguno esta en blanco ya haces lo que
quieras…incluso puedes llamarlo evalua_campos_manda_mail y si todos
los campos estan rellenados entonces mandas el email.

Quizas no sea la mejor solucion, pero a estas horas es lo primero que se
me viene a la cabeza.
Salu2 :wink:


#4

Gracias por contestar tán rápido.

Suponía que tenía que haber alguna manera de no tener que utilizar
tablas y poder utilizar los modelos con sus validadores. me ha gustado.

Joripel gracias, iba a utilizar esa técnica si no se podía utilizar los
validadores del modelo.

Creo que utilizaré “tableless”.

Un saludo lista.