When submitting billing information in the past I've always used
attr_accessor for credit card details as they should not be saved in
the database.   In addition I always end up storing the card
expiration date so that the date form helper works correctly.

With Active Model it seems logical to create a CreditCard class to
hold this data instead.

**1st issue.**

It seems there still isn't support for handling the form date_select.
(the card_expires_on(*) parameters).  Should this work?  Perhaps I'm
just missing an ActiveModel module

**2nd issue.**

In a perfect world this CreditCard class would be on the same form as
an ActiveRecord Order class but I have not been able to get an
ActiveModel to work as a nested object on a form.


something like this..  on the order new form
<%= form_for @order do |f| -%>
. order stuff here....
       <% f.fields_for :credit_card do |cc_fields| %>
         <%= cc_fields.label :card_number, '*Number' %>
         <%= cc_fields.text_field :card_number, :class =>
'text', :autocomplete => 'off' %>
        <% end %>

I have not found what magic I need to add to the order model to make
this work.

The <% f.fields_for :credit_card do |cc_fields| %> block is never
executed

if credit card was an ActiveRecord I would simply put
has_one :credit_card
accepts_nested_attributes_for :credit_card

instead I added a
attr_accessor :credit_card to the Order ActiveRecord class

and my credit_card class looks like this....

    class CreditCard

      include ActiveModel::Validations
      include ActiveModel::AttributeMethods
      include ActiveModel::Callbacks
      include ActiveModel::Conversion
      extend ActiveModel::Naming

      #  belongs_to :user
 
attr_accessor :card_type, :card_number, :card_verification, :card_expires_on, 
:agree
 
validates :card_type, :card_number, :card_verification, :card_expires_on, 
:agree, :presence
=> true

      def initialize(attributes = {})
        expire_date = {}
        #raise attributes.inspect
        attributes.each do |name, value|
            send("#{name}=", value)
            #this breaks on date items from date_select
        end
      end

      def persisted?
        false
      end
    end

Any idea what I am missing?

-- 
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 rubyonrails-t...@googlegroups.com.
To unsubscribe from this group, send email to 
rubyonrails-talk+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.

Reply via email to