I have an app with users that can optionally have stock certificates
and offers to buy or sell.  I have validations for these objects (see
model classes below).  When I create a new user in AS, even though I
do not specifically add a certificate or offer, I get validation
errors for both, as if it's trying to create empty associated objects.
If I remove the validations, it does indeed create erroneous
certificates and offers.  Why is AS doing this?  Thanks.

(I was able to reproduce this in AS 1.2, then upgraded to latest 2.2
on Ubuntu and Mac OS X 10.5.8.)

=================================================
class User < ActiveRecord::Base
  belongs_to :user_status
  has_and_belongs_to_many :roles
  has_many :user_contacts
  has_many :certificates
  has_many :offers

  require "digest/sha1"

  validates_length_of :first_name, :in => 2..12, :allow_nil => false
  validates_length_of :last_name, :in => 2..16, :allow_nil => false
  validates_presence_of :login
  validates_uniqueness_of :login
  validates_length_of :login, :in => 4..16
  validates_presence_of :password
  validates_confirmation_of :password
  validates_length_of :address, :in => 4..128, :allow_nil => false
  validates_length_of :city, :in => 4..32, :allow_nil => false
  validates_length_of :zip_code, :in => 5..10

  acts_as_reportable

  before_save :doBeforeSave

  def name
    "#{first_name} #{last_name}"
  end

  def doBeforeSave
    self.password = Digest::SHA1.hexdigest(self.password)[0..39]
unless (self.password.length > 20)
  end

  def confirm_password=(sNewPassword)
    @sConfirmPassword = sNewPassword
  end

  def confirm_password
    @sConfirmPassword
  end

  def getEmail
    emailType = ContactType.find(:first, :conditions => ["name = ?",
"eMail"])
    UserContact.find(:first, :conditions => ["user_id = ? AND
contact_type_id = ?", self.id, emailType ])
  end

  def getPhone
    phoneTypes = ContactType.find(:all, :conditions => ["name IN (?)",
ContactType.getPhoneTypes])
    UserContact.find(:first, :conditions => ["user_id = ? AND
contact_type_id IN (?)", self.id, phoneTypes ])
  end

end

=================================================
class Certificate < ActiveRecord::Base
  belongs_to :user
  belongs_to :certificate_state
  has_and_belongs_to_many :offers

  validates_presence_of :number
  validates_uniqueness_of :number, :message => "That certificate
number is already registered with another investor."
  validates_numericality_of :number_of_shares, :only_integer => true

  def to_s
    "#{number}: #{number_of_shares} shares"
  end

end

=================================================
class Offer < ActiveRecord::Base
  belongs_to :user
  belongs_to :offer_state
  belongs_to :offer_type
  has_and_belongs_to_many :certificates

  validates_presence_of :user_id
  validates_presence_of :offer_type_id
  validates_presence_of :offer_state_id
  validates_numericality_of :number_of_shares, :only_integer =>
true, :greater_than_or_equal_to => 0, :less_than_or_equal_to =>
10000000
  validates_presence_of :price_per_share
  def validate
    errors.add_to_base "There must be at least 30 days between date
opened and closed" if self.date_closed < (self.date_opened + 30.days)
  end

  def to_s
    "#{offer_type.name} #{number_of_shares} at $#{"%.2f" %
price_per_share} per share."
  end

end

-- 
You received this message because you are subscribed to the Google Groups 
"ActiveScaffold : Ruby on Rails plugin" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/activescaffold?hl=en.

Reply via email to