[Ror-es] Problema con validaciones

Héctor Pérez Arenas ruby-forum-incoming at andreas-s.net
Thu Sep 6 09:25:11 GMT 2007


Damian Janowski wrote:
> Como dice el "Warning" de la documentaci�n [1], para validar la
> presencia de una relaci�n hay que utilizar el nombre de la clave
> for�nea, y no el de la 
> asociaci�n:
validates_presence_of :user_id
> 
> PD: �Ambas relaciones utilizan la misma FK?

Cierto, gracias. Ahora queda según [2]

Una cosa más. ¿Son necesarias las siguientes lineas para que aparezca el 
error?
    errors.add(:receiver,"...") if receiver.nil?
    errors.add(:sender,"...") if sender.nil?
¿o validates_presence_of ya lo hace? Suponía que sería así, pero 
testeando sólo me aparece si lo añado explícitamente con errors.add en 
el método validate [3].


[2]

class Transfer < ActiveRecord::Base
  belongs_to :receiver,
           :class_name => "User" ,
           :foreign_key => "receiver_id"
  belongs_to :sender,
           :class_name => "User" ,
           :foreign_key => "sender_id"

  validates_presence_of :receiver_id, :sender_id, :amount

  protected
  def validate
    #errors.add(:receiver,"...") if receiver.nil?
    #errors.add(:sender,"...") if sender.nil?
    errors.add(:amount, "should be at least 0.01") if amount.nil? || 
amount < 0.01
  end
end


[3]

  def test_not_create_transfer_if_params_missing
    check_not_create_transfer_if_missing(:amount)
    check_not_create_transfer_if_missing(:receiver)
    check_not_create_transfer_if_missing(:sender)
  end

  private
  def create_transfer(params={})
    default={:amount=>3.0,:receiver=>@user,:sender=>@userB}
    Transfer.create(default.merge(params))
  end

  def check_not_create_transfer_if_missing(param)
    t=create_transfer(param=>nil)
    assert !t.valid?
    assert t.errors.invalid?(param)
  end
-- 
Posted via http://www.ruby-forum.com/.


More information about the Ror-es mailing list