Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

rails simple_form fields not related to the model

I have an existing form which is tied to a model named 'Order', but i want to add new form fields that will capture Credit Card info such as name, cc number, etc to be processed on a 3rd party payment gateway.

But since i don't want to save CC info in our database, there are no corresponding columns of that in my order table. And this gives me an error when submitting the form that those Credit card input fields are not 'part' of the order model.

like image 690
zeratool Avatar asked Aug 27 '12 17:08

zeratool


2 Answers

If I understand your answer correctly, what you want to do is explained in the official wiki page here: Create a fake input that does NOT read attributes. You can use a field not related to any real database column by Edward's suggestion, however you don't need to define an attribute in your model if the form field is nothing to do with the model.

In summary, the trick explained in the page is defining a custom input called 'FakeInput' and use it like this:

<%= simple_form_for @user do |f| %>   <%= f.input :agreement, as: :fake %>   .... 

Do not forget to restart your rails server after adding/modifying a custom input as Fitter Man commented.

UPDATE: Please note that the official wiki page has updated and the sample code on the wiki page is not working for those which use older versions of SimpleForm. Use code below instead if you encounter an error like undefined method merge_wrapper_options for.... I'm using 3.0.1 and this code works well.

class FakeInput < SimpleForm::Inputs::StringInput   # This method only create a basic input without reading any value from object   def input     template.text_field_tag(attribute_name, input_options.delete(:value), input_html_options)   end end 
like image 128
baxang Avatar answered Sep 19 '22 04:09

baxang


You can use attr_accessor

 class Order < ActiveRecord::Base     attr_accessor :card_number    end 

Now you can do Order.first.card_number = '54421542122' or use it in your form or whatever else you need to do.

See here for ruby docs http://www.ruby-doc.org/core-1.9.3/Module.html#method-i-attr_accessor and here for a useful stackoverflow question What is attr_accessor in Ruby?

Don't get it mixed up with attr_accessible! Difference between attr_accessor and attr_accessible

like image 20
Edward Avatar answered Sep 20 '22 04:09

Edward