If I read correctly, you only need to change default value depending on some 
conditions. You can do that in do_new in controller, instead of adding a form 
helper:

def do_new
  super
  if params[:widgetmodel_id] #Form invoked from WidgetModel list. (create new 
from nested view)
    widgetmodel = Widjetmodel.find(params[:widgetmodel_id])
    @record.rtype = widgetmodel.rtype
    @record.widgettype = widgetmodel.widgettype
  end
end

El Miércoles, 15 de abril de 2015 15:33:07 coalex escribió:
> Sometimes I need a set a few form columns to a certain value based on where
> the form is invoked in the application (if nested, if with associations,
> etc.), otherwise the form colums should function as normal(if no conditions
> exist) as send_form_on_update_column. I'm having trouble doing both.
> I need advice on writing the helper cleanly.
> 
> Example:
> Model:  widget.rb
> belongs_to :rtype
> belongs_to :widgettype
> belongs_to :widgetmodel
> 
> Controller: widget_controller.rb
> 
> active_scaffold :"widget" do |conf|
> …
> conf.columns[:rtype].label = "Entity"
> conf.columns[:rtype].form_ui = :select #example: “Software”
> conf.columns[:rtype].update_columns = :widgettype
> conf.columns[:rtype].send_form_on_update_column = true
> …
> conf.columns[:widgettype].label = "Type"
> conf.columns[widgettype].form_ui = :select #example: “Audio Editing Suites”
> conf.columns[widgettype].update_columns = [:widgetmodel]
> conf.columns[widgettype].send_form_on_update_column = true
> …
> conf.columns[:widgetmodel].label = "Model"
> conf.columns[:widgetmodel].form_ui = :select #example: “Audacity 2.1.0”
> 
> 
> \\widget_helper.rb
> …
> 
> def rtype_form_column(record, options)
> 
> columns = [ 'name', 'id']  # Rtype's name for the selection box.
> list = Rtype.find :all,
> 
>                      :select => columns.join(', '),
>                      :order => 'name'
> 
>  @rtypes = list.map{|r|[r.name, r.id]}
> 
> if params[:widgetmodel_id] #Form invoked from WidgetModel list. (create new
> from nested view)
> 
>     widgetmodel = Widjetmodel.find(params[:widgetmodel_id])
> 
>      select(:record, :rtype, @rtypes, :selected =>
> assetmodel.rtype_id,:include_blank => true)
> 
> elsif @record.rtype #Form invoked where record.rtype is already
> assigned.(an update)
> 
>      select(:record, :rtype, @rtypes, :selected =>
> @record.rtype_id,:include_blank => true)
> 
> else #If no conditions exist.(create new)
> 
> #Behave normally...Forget this form_helper exists.
> *#What goes here?*
> 
> end
> end
> 
> --Likewise
> 
> def widgettype_form_column(record, options)
> columns = [ 'name', 'id']                        # add the rest you need
> here
> 
>    list = Widgettype.find :all,
> 
>                      :select => columns.join(', '),
>                      :order => 'name'   # maybe some sql to limit it here -
> 
> not sure
> 
>  @widgettypes = list.map{|r|[r.name, r.id]}
> 
> if params[:widgetmodel_id] #Form invoked from WidgetModel list. (nested
> view)
> widgetmodel = widgetmodel.find(params[:widgetmodel_id])
> 
> select(:record, :widgettype, @widgettypes, :selected =>
> widgetmodel.widgettype_id,:include_blank => true)
> 
> elsif @record.widgettype #Form invoked where record.widgettype already
> exist (an update)
> 
> select(:record, :widgettype, @widgettypes, :selected =>
> @record.widgettype_id,:include_blank => true)
> 
>   else   #Forget this form_helper exists.
> *    #What goes here?*
> end
> 
> end
> 
> Any thoughts would be greatly appreciated!

-- 
You received this message because you are subscribed to the Google Groups 
"ActiveScaffold : Ruby on Rails Gem" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/activescaffold.
For more options, visit https://groups.google.com/d/optout.

Reply via email to