Colin Law wrote:
> 2009/9/14 Kendall Buchanan <[email protected]>:
>> saved to the database. I'd like it to not save.
>>
>> Am I missing something simple?
> 
> Are you sure it is getting saved?  Are you checking the return from
> save, it should return false if the save fails.  If you still think it
> is not functioning correctly post the relevant section of controller
> code here.
> 
> Colin

Sure.

Yeah, it's getting saved by an INSERT statement. Here's the controller 
code:

  def create
    @activity = Activity.find(params[:activity_id])
    @payment_application = 
@activity.payment_applications.new(params[:payment_application])

    respond_to do |format|
      if @payment_application.save
        format.html { redirect_to(@payment_application) }
        format.js { index }
        format.apply_to_activity { index }
        format.xml  { render :xml => @payment_application, :status => 
:created, :location => @payment_application }
      else
        format.html { render :action => "new" }
        format.js { render :action => "new", :status => 
:unprocessable_entity }
        format.apply_to_activity { index }
        format.xml  { render :xml => @payment_application.errors, 
:status => :unprocessable_entity }
      end
    end
  end

And the model code:

class PaymentApplication < ActiveRecord::Base
  belongs_to :activity
  belongs_to :payment

  after_create :apply_full, :if => :apply_full_payment

  attr_accessor :apply_full_payment
  attr_accessor :amount_as_str

  acts_as_ferret :fields => { :payment_id => { :store => :yes },
                              :check_num => { :store => :yes },
                              :comments => { :store => :yes } }

  validate :total_applications_cannot_exceed_payment_amount
  validate :cannot_exceed_activity_price
  validates_numericality_of :amount

  def amount=(value)
    unless value.blank?
      write_attribute(:amount, Accounting.string_as_int(value))
    else
      write_attribute(:amount, nil)
    end
  end

  protected

    def apply_full
      write_attribute(:amount, self.payment.amount)
      write_attribute(:comments, self.payment.comments)
      self.save
    end

    def total_applications_cannot_exceed_payment_amount
      if self.payment
        if self.payment.payment_applications.sum(:amount) + self.amount 
> self.payment.amount
          self.errors.add(:amount, "of all payment applications cannot 
exceed total payment amount.")
        end
      end
    end

    def cannot_exceed_activity_price
      if self.payment
        if self.payment.payment_applications.sum(:amount) + self.amount 
> self.activity.price
          self.errors.add(:amount, "cannot exceed activity price.")
        end
      end
    end

end

Mucho thankso for the response.

-- 
Posted via http://www.ruby-forum.com/.

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" 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/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to