Ah yes, I went through this same problem a few weeks ago with a CC form. Ended up doing the same thing.
On 08/11/2012, at 9:46 AM, Steven Ringo <[email protected]> wrote: > Hi, > > @Ivan, thanks :-) > > Since this is a credit card field, we are going to just have separate > explicit fields for month and year, as that's what the acquirer wants anyway. > > I was worried about how to handle validations on the combined date, but we > don't need to validate at that level. Rather we validate for all the credit > card fields together. > > Perhaps it might be a good idea to see multi-parameter attributes factored > out of AR and into ActiveModel? > > Thanks again. > > Steve > > On Thursday, 8 November 2012 at 9:39 AM, Ivan Vanderbyl wrote: > >> Hi Steve, >> >> This is handled by ActiveRecord usually in >> ActiveRecord::AttributeAssignment#assign_multiparameter_attributes >> (https://github.com/rails/rails/blob/master/activerecord/lib/active_record/attribute_assignment.rb#L62-66) >> >> You could experiment with either mixing in that module or pulling out the >> #assign_multiparameter_attributes methods into your own module and using it >> with ActiveModel. >> >> AFAIK there is no equivalent for ActiveModel. >> >> — Ivan >> >> On 08/11/2012, at 8:55 AM, Steven Ringo <[email protected]> wrote: >> >>> Hi all, >>> >>> Anyone have any idea on the best way to parse a date from a rails form and >>> coerce it into a date field in an active model object. >>> >>> Rails send this in the params hash: >>> >>> "credit_card_expiry(3i)"=>"1", >>> "credit_card_expiry(2i)"=>"11", >>> "credit_card_expiry(1i)"=>"2012" >>> >>> However the model sees these as being three separate attributes, and of >>> course the the active model object has no way of knowing this. >>> >>> I have seen techniques that manually mangle the hash like so (or >>> introspective variants), but this feels very hacky. >>> >>> params[:subscription][:credit_card_expiry] = >>> Date.new(params[:subscription][:"credit_card_expiry(1i)"].to_i, >>> >>> params[:subscription][:"credit_card_expiry(2i)"].to_i, >>> params[:subscription][:"credit_card_expiry(3i)"].to_i) >>> >>> params[:subscription].delete(:"credit_card_expiry(1i)") >>> params[:subscription].delete(:"credit_card_expiry(2i)") >>> params[:subscription].delete(:"credit_card_expiry(3i)") >>> >>> Thanks, >>> >>> Steve >>> >>> >>> -- >>> You received this message because you are subscribed to the Google Groups >>> "Ruby or Rails Oceania" group. >>> To view this discussion on the web visit >>> https://groups.google.com/d/msg/rails-oceania/-/5N1Kll4oUZ4J. >>> 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/rails-oceania?hl=en. >> >> >> -- >> You received this message because you are subscribed to the Google Groups >> "Ruby or Rails Oceania" 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/rails-oceania?hl=en. > > > -- > You received this message because you are subscribed to the Google Groups > "Ruby or Rails Oceania" 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/rails-oceania?hl=en. -- You received this message because you are subscribed to the Google Groups "Ruby or Rails Oceania" 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/rails-oceania?hl=en.
