Hi everyone,
I''m trying to update attributes in a collection passed to form_tag.
However my syntax for extracting values from the params hash results
in this exception:
undefined method `keys'' for ["Vanilla", "Rose",
"Cranberry"]:Array
So it appears I am trying to call keys on an array of "flavor"
attribute values, rather than extracting "Candle" object id keys from
the params hash. I have included the code from the view and controller
below.
Thanks for taking the time to read this. I appreciate any specific
suggestions, as well as any resources that explain the intricacies of
params.
Thank You!
Supraja
----
edit_all.html.erb:
<% form_tag(:action => "update_candle_line") do %>
<% for @candle in @candles %>
<%= text_field_tag("candle[]", @candle.flavor) %>
<% end %>
<%= submit_tag "Update" %>
<% end %>
----
edit_all_controller.rb:
def update_candle_line
Candle.update(params[:candle].keys, params[:candle].values)
redirect_to_index("Flavors updated!") # private method of
controller
end
--~--~---------~--~----~------------~-------~--~----~
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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---
On 19 Nov 2008, at 16:25, Supraja wrote:> > Hi everyone, > > I''m trying to update attributes in a collection passed to form_tag. > However my syntax for extracting values from the params hash results > in this exception: > > undefined method `keys'' for ["Vanilla", "Rose", "Cranberry"]:Array > > So it appears I am trying to call keys on an array of "flavor" > attribute values, rather than extracting "Candle" object id keys from > the params hash. I have included the code from the view and controller > below. >If you call your parameters candle[] then you will indeed get back a single array parameter if you wanted a hash keyed by id then you''d need parameters of the form candle[some_id][flavor]. fields_for etc... may be able to help you create those parameter names rather than having to bash them in by hand. Fred> Thanks for taking the time to read this. I appreciate any specific > suggestions, as well as any resources that explain the intricacies of > params. > > Thank You! > Supraja > > ---- > edit_all.html.erb: > <% form_tag(:action => "update_candle_line") do %> > <% for @candle in @candles %> > <%= text_field_tag("candle[]", @candle.flavor) %> > <% end %> > > <%= submit_tag "Update" %> > <% end %> > > ---- > edit_all_controller.rb: > def update_candle_line > Candle.update(params[:candle].keys, params[:candle].values) > redirect_to_index("Flavors updated!") # private method of > controller > end > > >--~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Hi Fred,
I appreciate your quick reply.
Here''s an example of an HTML tag after I used fields_for() (code
pasted below*):
<input id="candle_flavor" name="candle[flavor]"
size="30" type="text"
value="Vanilla" />
How can I change edit_all.html.erb code to get:
id="candle[id][flavor]" name="candle[id][flavor]"
Thanks,
Supraja
----
* edit_all.html.erb
<% form_tag(:action => "update_candle_line") do %>
<% for @candle in @candles %>
<p>
<% fields_for @candle do |can| %>
<%= can.text_field(:flavor) %>
<% end %>
</p>
<% end %>
<p>
<%= submit_tag "Update" %>
</p>
<% end %>
On Nov 19, 11:07 am, Frederick Cheung
<frederick.che...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
wrote:> On 19 Nov 2008, at 16:25, Supraja wrote:
>
>
>
> > Hi everyone,
>
> > I''m trying to update attributes in acollectionpassed to
form_tag.
> > However my syntax for extracting values from the params hash results
> > in this exception:
>
> > undefined method `keys'' for ["Vanilla",
"Rose", "Cranberry"]:Array
>
> > So it appears I am trying to call keys on an array of
"flavor"
> > attribute values, rather than extracting "Candle" object id
keys from
> > the params hash. I have included the code from the view and controller
> > below.
>
> If you call your parameters candle[] then you will indeed get back a
> single array parameter
>
> if you wanted a hash keyed by id then you''d need parameters of the
> form candle[some_id][flavor]. fields_for etc... may be able to help
> you create those parameter names rather than having to bash them in by
> hand.
>
> Fred
>
> > Thanks for taking the time to read this. I appreciate any specific
> > suggestions, as well as any resources that explain the intricacies of
> > params.
>
> > Thank You!
> > Supraja
>
> > ----
> > edit_all.html.erb:
> > <% form_tag(:action => "update_candle_line") do %>
> > <% for @candle in @candles %>
> > <%= text_field_tag("candle[]", @candle.flavor) %>
> > <% end %>
>
> > <%= submit_tag "Update" %>
> > <% end %>
>
> > ----
> > edit_all_controller.rb:
> > def update_candle_line
> > Candle.update(params[:candle].keys, params[:candle].values)
> > redirect_to_index("Flavors updated!") # private method of
> > controller
> > end
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---
Hi everyone,
Thanks to Fred for an excellent explanation of params in his blog
post: http://www.spacevatican.org/2008/7/18/parametrised-to-the-max.
Anyone who is interested in params could probably learn a lot from
reading this interactive post.
Based on the post, I was able to update_attributes() to a collection
of candles.
Thank You!
Supraja
# edit_all.html.erb
<% form_tag(:action => "update_candle_line") do %>
<% for @candle in @candles %>
<p>
<% fields_for @candle do |can| %>
<%= can.text_field(:flavor, "index" => @candle.id) %>
<% end %>
</p>
<% end %>
<p>
<%= submit_tag "Update" %>
</p>
<% end %>
# edit_all_controller.rb
def update_candle_line
params[:candle].each do |id, new_attributes|
Candle.find(id).update_attributes new_attributes
end
redirect_to_index("Flavors updated!")
end
On Nov 19, 3:39 pm, Supraja
<supraj...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
wrote:> Hi Fred,
>
> I appreciate your quick reply.
>
> Here''s an example of an HTML tag after I used fields_for() (code
> pasted below*):
>
> <input id="candle_flavor" name="candle[flavor]"
size="30" type="text"
> value="Vanilla" />
>
> How can I change edit_all.html.erb code to get:
>
> id="candle[id][flavor]" name="candle[id][flavor]"
>
> Thanks,
> Supraja
>
> ----
>
> * edit_all.html.erb
> <% form_tag(:action => "update_candle_line") do %>
>
> <% for @candle in @candles %>
> <p>
> <% fields_for @candle do |can| %>
> <%= can.text_field(:flavor) %>
> <% end %>
> </p>
> <% end %>
> <p>
> <%= submit_tag "Update" %>
> </p>
> <% end %>
>
> On Nov 19, 11:07 am, Frederick Cheung
<frederick.che...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
> wrote:
>
> > On 19 Nov 2008, at 16:25, Supraja wrote:
>
> > > Hi everyone,
>
> > > I''m trying to update attributes in acollectionpassed to
form_tag.
> > > However my syntax for extracting values from the params hash
results
> > > in this exception:
>
> > > undefined method `keys'' for ["Vanilla",
"Rose", "Cranberry"]:Array
>
> > > So it appears I am trying to call keys on an array of
"flavor"
> > > attribute values, rather than extracting "Candle"
object id keys from
> > > the params hash. I have included the code from the view and
controller
> > > below.
>
> > If you call your parameters candle[] then you will indeed get back a
> > single array parameter
>
> > if you wanted a hash keyed by id then you''d need parameters
of the
> > form candle[some_id][flavor]. fields_for etc... may be able to help
> > you create those parameter names rather than having to bash them in by
> > hand.
>
> > Fred
>
> > > Thanks for taking the time to read this. I appreciate any
specific
> > > suggestions, as well as any resources that explain the
intricacies of
> > > params.
>
> > > Thank You!
> > > Supraja
>
> > > ----
> > > edit_all.html.erb:
> > > <% form_tag(:action => "update_candle_line") do
%>
> > > <% for @candle in @candles %>
> > > <%= text_field_tag("candle[]", @candle.flavor)
%>
> > > <% end %>
>
> > > <%= submit_tag "Update" %>
> > > <% end %>
>
> > > ----
> > > edit_all_controller.rb:
> > > def update_candle_line
> > > Candle.update(params[:candle].keys, params[:candle].values)
> > > redirect_to_index("Flavors updated!") # private
method of
> > > controller
> > > end
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---