Normally, when using form helpers in Rails, each field directly correlates to a method on the appropriate object.
However, I have a form (user signup) that needs to include fields that are not part of the user model itself (for instance, card details) but need to appear.
How can I build the form so that I can get the necessary fields, and validate them as I need to (so that it fits with all my other validations) without dirty-ing my user model?
I'm not sure what you mean by "dirty-ing" your user model, but you can do this using the attr_accessor method. This will allow you to create an attribute for the model that can be used for validations:
class Widget < ActiveRecord::Base
attr_accessor :confirmation_email
validates_length_of :confirmation_email, :within => 1..10
end
To only run the validation at certain times, you could use an :if
condition:
validates_length_of :confirmation_email, :within => 1..10, :if => Proc.new { |widget| widget.creation_step > 2 }
You can also use a class method, like: :if => :payment_complete
. With these you should be able to achieve the functionality you want. As far as I know there isn't any more concise way.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With