Whenever you''re using form_for(anObject), you want to use FormHelpers:
http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html
Whenever you''re using a standalone form that''s not tied to a
model''s
attributes (IE, one in which you do not pass the FormConstructor into
the block as ''f'', on which you''d call f.text_field )
you want to use
FormTagHelpers:
http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html
You''re using form_for with an object, which means you should use the
''tagless'' versions of the form constructors, but instead
you''re using
f.text_field_tag. The correct syntax is:
f.text_field :attribute_name, {value => element.value}
However, since you''re linking up associations in your form
you''ll want
to use the fields_for helper, to bring the constructor into scope
while still referring to the proper element in the form. Read about it
here:
http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#M001741
Now, since you can set up Forms to ''has_many'' Elements, and
Elements
''belong_to'' a Form, you can make your query like this in your
Controller:
@form = Form.find(params[:id], {:include => :elements})
And then have the following code in your controller (Or something like
it, play with it a bit, I''ve never done anything exactly like this
before) :
<%= form_for @form, :action => create do |f| %>
<% @form.elements.each do |element| %>
<% fields_for element do |e| %>
<%= e.label ''value'' %>
<%= e.text_field :value %>
<% end %>
<% end %>
<%= submit_tag %>
<% end %>
Play with the params output of that, and adjust your create action
accordingly.
If that''s not pretty enough for you, use HAML:
= form_for @form, :action => create do |f|
- @form.elemenst.each do |element|
- fields_for element do |e|
= e.label ''value''
= e.text_field :value
= submit_tag
On Sep 22, 5:23 pm, "Commander Johnson"
<commanderjohn...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
wrote:> Hi,
> Thanks to Erol for giving me input on how to move stuff to a namespace. It
> meant some work, so next time I will spend more time thinking before
> blasting off.
>
> I''ve stored a Form in my DB which has Elements. Below is my
FormsController.
> All it does is show.
>
> class FormsController < ApplicationController
> def show
> @form = Form.find(params[:id])
> @elements = Element.find(:all, :conditions => { :form_id => @form
})
>
> respond_to do |format|
> format.html # show.html.erb
> end
> end
>
> end
>
> I get stuck creating the view. It should go through all of the
Form''s
> elements and display a label with the Element''s name, and a text
field with
> the Element''s value.
>
> Right now I have this:
>
> <% form_for @form, :url => { :action => ''create''
} do |f| %>
> <fieldset>
> <legend><%= @form.name %></legend>
> <% form_for(@form) do |f| %>
> <% for element in @elements %>
> <%= f.label_tag ''value'',
''name'' %>
> <%= f.text_field_tag ''value'', element.value
%>
> <% end %>
> <%= f.submit ''Submit'' %>
> <% end %>
> </fieldset>
> <% end %>
>
> I get this error:
>
> undefined method `label_tag'' for
#<ActionView::Helpers::FormBuilder:0xbcd7ee>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk+unsubscribe@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---