Using Formtastic, in read-only mode, for a controller’s Show action

Formtastic is a powerful form library for Ruby on Rails. The documentation and tutorials I’ve read describe using it for the New and Edit actions, for an ActiveRecord, CRUD controller. However, … wouldn’t it be useful to re-use the same Formtastic partials the controller’s Show action?

After some trial and error, I succeeded in using adding a flag to disable/enable the inputs depending on the Action. That disableFlag is this then passed as the ‘disabled’ parameter, in the :input_html parameters. For the sake of this example, I have removed some of the extraneous code.

Here is an excerpt of the show.html.erb file. Notice the disableFlag being passed into the partial, in the locals array.

   Viewing Widget
   'form', :locals=>{:widget=>@widget, :disableFlag=>true} %>
    'edit', :id => @widget.id %>
   

Here is an excerpt of the edit.html.erb file. Notice the disableFlag, again.

   Editing Widget
    'form', :object => @widget, :locals => {:button_text =>"Update", :disableFlag=>false} %>
    |
   

Below… is part of the main partial, _form.html.erb

  
   {:multipart => true}) do |f| %>
  

											
	   <%= f hop over to this website.input :employee_name_first, :input_html => { :disabled=>disableFlag,  :size => 25 } %>
	    { :disabled=>disableFlag,  :size => 25 } %> 
	    { :disabled=>disableFlag,  :size => 25 } %>
	    { :disabled=>disableFlag,  :size => 25 } %>
	    { :disabled=>disableFlag,  :size => 25 } %>	
			

	
	   
	      disableFlag, :f => builder %>
	   	
	

And… here is a sub-form, _widget_workflow_fields.html.erb which receives the disableFlag.



	Workflow
	{:disabled=>disableFlag }, :as=>:select %>	

See the attached screenshots for an example for the main and sub forms, in new/edit versus show mode.

Leave a Reply

Your email address will not be published. Required fields are marked *