Question

Extract of my Gemfile:

gem 'rails', '3.0.3'
gem 'inherited_resources', '1.2.1'
gem 'simple_form', '1.4.0'

For any resource, I have 1 view for the 3 actions (new, edit & show). Example:

<h1><%= I18n.t('admin.form.'+action_name.downcase, :name => controller_friendly_name) %></h1>
<%= simple_form_for([:admin, resource]) do |f| %>
  <%= render "admin/shared/errors" %>
  <%= f.input :title, 
  :label => "Title", 
  :hint => I18n.t('admin.form.input.title.hint', :name => controller_friendly_name), 
  :required => true,
  :error => false,
  :input_html => { :class => :large, :placeholder => I18n.t('admin.form.input.title.placeholder', :name => controller_friendly_name) }
  %>
  <%= f.input :is_visible, 
  :as => :radio, 
  :label => "Visible", 
  :error => false, 
  :required => true, 
  :collection => [['Yes', true], ['No', false]],
  :wrapper_class => 'checkboxes-and-radiobuttons', 
  :checked => true
  %>
  <%= render "admin/shared/validation", :f => f %>
<% end %>

<% init_javascript "MyApplication.Form.disable();" if [:show].include?(action_name.to_sym) %>

See how the #show action set all the fields to disabled ? This is ugly.
Consider I can't refactor the views to have a show.html.erb file.

What I want to do:

When the action is #show, the simple_form builder use a custom builder wich replace <input>, <textarea>, <select> by <p> html tag, with the value.

Furthermore, I will customise the radiobuttons, checkboxes to.

My first step:

# app/inputs/showvalue_input.rb
class ShowvalueInput < SimpleForm::Inputs::Base
  def input
    # how to change 'text_field' by <p> container ?
    @builder.text_field(attribute_name, input_html_options)
  end
end

Can't find the way to do it. Custom Form Builders or Custom Inputs (with monkey patching) ?

Thank for the help !

No correct solution

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top