Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using Rails form helpers on non-existent methods

Tags:

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?

like image 547
Neil Middleton Avatar asked Feb 19 '10 00:02

Neil Middleton


1 Answers

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.

like image 191
Benjamin Manns Avatar answered Oct 11 '22 19:10

Benjamin Manns