Duda sobre validators

Hola. Estoy usando los metodos validates_* para hacer validaciones a
nivel de ActiveRecord. Asi, antes de gravar, uno se asegura de que lo
que grabas cumple las restricciones que deseas.
Eso está muy bien, pero lo que seria más interesante es tener
validators a nivel de controlador, que hiciesen las comprovaciones
despues de POSTear un formulario, ya que es posible tener formularios
que tengan campos que no pertenezcan a ningun modelo.
Hay algo en ese sentido en Rails? O debo empezar a meter “if” en los
controladores?

Gracias!


Dani

Al crear el objeto, digamosle “Post” puedes hacer la comprobación de
que ese modelo es valido directamente en el controlador.

post.rb

class Post < ActiveRecord::Base
validates_presence_of :title
end

posts_controller.rb

def test
@post = Post.new(params[:post])
if @post.valid?

end
end

Un saludo,

Francesc

On Feb 5, 2008, at 6:00 PM, Dani P. wrote:

Gracias!


Dani


Ror-es mailing list
[email protected]
simplelogica.net


name. Francesc E. i Martí
voice. +34 678.681.603

Hombre, lo de @post.valid? está bien. Pero imagina que en el
formulario hay un campo de texto que no se grabará (no forma parte del
modelo), sino que es un campo de texto donde el usuario puede entrar
una URL, y esa url se debe añadir al final de un archivo.
Al parecer hay solo 2 opciones, o validar por javascript, o validar
en el controlador.
Si se quisiese hacer mas “pulido”, quiza una idea seria hacer un
Modulo llamado Validaciones, que tuviese un metodo para cada
formulario, y al metodo le pasas los parametros del request:

if (!Validaciones.validaFormularioPost(params).valid?)
casca
end

Pero el el cuerpo del metodo (donde pone casca), como le rediriges al
formulario donde estaba? Y encima con los datos que tenia entrados?

PD: Googleando veo que hay un plugin en ajax, pero me parece un poco
exagerado para lo que necesito.
PDD: Otra solución es “polucionar” el modelo con campos extra que no
tienen que ver con la logica del modelo (en el ejemplo de antes, meter
un atributo email) y validar desde ActiveRecord, aunque al final no
vaya a gravar ese campo. Pero no se que es peor :slight_smile:

Puedes “polucionarlo” como dices tu … Pero vaya, tampoco es tanta
polucion.

post.rb

class Post < ActiveRecord::Base
attr_accessor :title
validates_presence_of :title
end

script/console

post = Post.new()
=> #<Post id: nil, created_at: nil, updated_at: nil>
post.valid?
=> false
post.title = “Hello”
=> “Hello”
post.valid?
=> true

Un saludo,

Francesc

On Feb 5, 2008, at 6:50 PM, Dani P. wrote:

if (!Validaciones.validaFormularioPost(params).valid?)
un atributo email) y validar desde ActiveRecord, aunque al final no

class Post < ActiveRecord::Base
end

lo


Ror-es mailing list
[email protected]
simplelogica.net


Ror-es mailing list
[email protected]
simplelogica.net


name. Francesc E. i Martí
voice. +34 678.681.603

Hola , yo para validar formularios sin modelo asociado lo hago de la
siguiente manera

en app/models/tableless:

class Tableless < ActiveRecord::Base
def self.columns() @columns ||= []; end

def self.column(nombre, sql_type = nil, default = nil, null = true)
columns << ActiveRecord::ConnectionAdapters::Column.new(nombre.to_s,
default, sql_type.to_s, null)
end

def save(validate = true)
validate ? valid? : true
end
end

luego en mi modelo que quiero validar y que no está en la base de datos:

app/models/contact.rb:

class Contact < Tableless
column :nombre, :string
column :email, :string
column :empresa, :string
column :direccion, :string
column :telefono, :string
column :asunto, :string
column :ciudad, :string
column :mensaje, :text

validates_format_of :email, :with =>
/^\S+@([?)[a-zA-Z0-9-.]+.([a-zA-Z]{2,4}|[0-9]{1,4})(]?)$/ix
,:message
=>" está incorrecto o incompleto"

validates_presence_of :nombre,:mesage =>“es un dato requerido”
#validates_presence_of :email,:message=>" es un dato requerido"
validates_presence_of :mensaje ,:message=>“es un dato requerido”
end

espero te sirva,
saludos a la lista ror

2008/2/5 Francesc E. [email protected]: