Thank you, everybody, for your responses. I'll try out your suggestions when I get home tonite! ~Cheri
On Sep 23, 12:53 pm, Glenn Little <[email protected]> wrote: > You may not still need this after James' response, but given the exact > "Parameters" in your email, you can get at the approval value for the > 4th user with: > > params["user"]["4"]["approval"] > > params is a hash (well, in rails it's an enhanced hash, or "hash with > indifferent access" -- it just shrugs and says "meh") where the > values for some of the keys (commit, _method, etc) are just strings, but > the value for the "user" key is itself a hash, and the values of that > hash are also hashes, albeit one-element ones in your example. > > If the all-in-one sort of approach like James suggested doesn't work > for you (and sometimes I will avoid it just to make things more readable > or so that I can get in and do more detailed processing) you can iterate > over the users: > > params["user"].each do |user_id, value| > puts "User: #{user_id}, Approval: #{value['approval']}" > # or whatever checking, processing, and assigning you want > end > > If you had more elements in each "user" hash and wanted to get at > all of them, you could put another iteration inside the above: > > params["user"].each do |user_id, user_params| > user_params.each do |key, value| > # etc etc > end > end > > Hope that helps. > > -glenn > > James Miller wrote: > > When dealing with multiple records like this or when needing to delete a > > bunch of records with checkboxes, I usually create two more actions for > > the resource: update_multiple and destroy_multiple. > > > For updating multiple, you could do the following to handle all the > > users passed in your params[:user] hash: > > > users = params[:user] User.update(users.keys, users.values) > > > On Wed, Sep 23, 2009 at 10:51 AM, liquid_rails > > <[email protected] <mailto:[email protected]>> wrote: > > > Thanks, but I still don't understand what is being submitted. Is it a > > hash, an array of arrays, or what? For example, what would the syntax > > be to retrieve the approval value of user "4"? > > > Parameters: {"commit"=>"Submit", "user"=>{"6"=>{"approval"=>"1"}, > > "1"=>{"approval"=>"1"}, "2"=>{"approval"=>"2"}, "3"=> > > {"approval"=>"2"}, "4"=>{"approval"=>"2"}, "5"=>{"approval"=>"2"}}, > > "authenticity_token"=>"39757ec52a8cb0e04a7533686976d49388378c02", > > "_method"=>"put", "action"=>"approve", "controller"=>"admin/users"} > > > On Sep 23, 8:20 am, Nick Zadrozny <[email protected] > > <mailto:[email protected]>> wrote: > > > You also might consider the nested model approach, if all your > > users belong > > > to some common object. Might be a bit of a stretch for your case, > > but works > > > like a charm when it's a > > fit:http://weblog.rubyonrails.org/2009/1/26/nested-model-forms > > > > On Tue, Sep 22, 2009 at 22:15, James Miller > > <[email protected] <mailto:[email protected]>> wrote: > > > > > Check out the ActiveRecord::Base#update method where you can > > pass an > > > > array of IDs along with attributes to update all the user > > records at > > > > once. > > > > > James > > > > > On Sep 22, 2009, at 10:12 PM, liquid_rails > > <[email protected] <mailto:[email protected]>> > > > > wrote: > > > > > > It works :) Awesome! > > > > > Now I'm trying to figure out the best way to extract the data > > in the > > > > > controller so that I can update the user.approval value for each > > > > > user. This is what's being passed: > > > > > > Parameters: {"commit"=>"Submit", > > "user"=>{"6"=>{"approval"=>"1"}, > > > > > "1"=>{"approval"=>"1"}, "2"=>{"approval"=>"2"}, "3"=> > > > > > {"approval"=>"2"}, "4"=>{"approval"=>"2"}, > > "5"=>{"approval"=>"2"}}, > > > > > "authenticity_token"=>"39757ec52a8cb0e04a7533686976d49388378c02", > > > > > "_method"=>"put", "action"=>"approve", > > "controller"=>"admin/users"} > > > > > > Any hints would be appreciated! > > > > > Thanks in advance, > > > > > > ~Cheri > > > > > > On Sep 22, 12:41 pm, liquid_rails <[email protected] > > <mailto:[email protected]>> wrote: > > > > >> Great, thanks Jason! I'll try it. - Cheri > > > > > >> On Sep 22, 12:04 pm, Jason King <[email protected] > > <mailto:[email protected]>> wrote: > > > > > >>> No :) > > > > > >>> So, yeah, if you want just a single submit button then > > you'll want a > > > > >>> single form and you should use fields_for with the :index > > option... > > > > > >>> <% form_for ....etc. do %> <%# ....you can just have a > > > > >>> form_tag here if you want %> > > > > >>> <% @users.each do |user| %> <%# total aside: this is > > more > > > > >>> Ruby- > > > > >>> ish syntax %> > > > > >>> <%= other things %> > > > > >>> <% fields_for user, :index => user.id > > <http://user.id> do |f| %> > > > > >>> <%= f.radio_button :approval ..etc. %> > > > > >>> <% end %> > > > > >>> <% end %> > > > > >>> <%= submit_tag %> > > > > >>> <% end %> > > > > > >>> You'll find that all the radio buttons will be indexed, so > > you'll > > > > >>> receive params[:user][id_of_user][:approval] in your > > controller, so > > > > >>> you can easily set the right values for the right user all > > in one > > > > >>> action. > > > > > >>> On Sep 22, 2009, at 11:48 AM, liquid_rails wrote: > > > > > >>>> Thanks, Jason. > > > > > >>>> So, if I have a separate form for each user, is there any > > way to > > > > >>>> have > > > > >>>> just one submit button to submit all forms at the same time? > > > > > >>>> Cheri > > > > > >>>> On Sep 22, 11:42 am, Jason King <[email protected] > > <mailto:[email protected]>> wrote: > > > > >>>>> The problem is that you've got form_for [:admin, :user] > > instead of > > > > >>>>> form_for [:admin, @user] and then you're expecting (somehow) > > > > >>>>> f.radio_button to know which user to use to retrieve the seed > > > > >>>>> value. > > > > >>>>> Rails is using the last element of that array and calling > > > > >>>>> the .approval method on it (hence the error about the > > user:Symbol > > > > >>>>> (ie. :user ) not having that method defined. > > > > > >>>>> You're more likely to want to put the form within the @users > > > > >>>>> iteration > > > > >>>>> block, so that you have a separate form for each user. > > You can > > > > >>>>> then do: > > > > > >>>>> <% for user in @users %> > > > > >>>>> <% form_for [:admin, user] ...etc. do %> > > > > >>>>> <%= f.radio_button :approval ...etc. %> > > > > > >>>>> If not, if you want it all in one form, then you won't be > > able > > > > >>>>> to use > > > > >>>>> the form_for block helpers, rather you'll need to use > > > > >>>>> radio_button_tag > > > > >>>>> and setup the values and names manually. > > > > > >>>>> Regards, > > > > >>>>> Jason > > > > > >>>>> On Sep 22, 2009, at 11:30 AM, liquid_rails wrote: > > > > > >>>>>> I'm trying to generate a list of users with two radio > > buttons > > > > >>>>>> next > > > > >>>>>> to > > > > >>>>>> each user where I can either approve or reject a user, > > all in the > > > > >>>>>> same > > > > >>>>>> form. > > > > >>>>>> The following code, illustrates what I am trying to do > > and the > > > > >>>>>> error I > > > > >>>>>> am getting. > > > > >>>>>> Does anybody know how to do this? Thanks in advance! - > > Cheri > > > > > >>>>>> create_table "users", :force => true do |t| > > > > >>>>>> t.string "name" > > > > >>>>>> t.integer "approval", :default => 0 # 0=needs approval, > > > > >>>>>> 1=approved, 2=not approved > > > > >>>>>> end > > > > >>>>>> ------------------- > > > > > >>>>>> <% form_for [:admin, :user], :url => {:action => > > > > >>>>>> "user_approval" } do > > > > >>>>>> |f| %> > > > > >>>>>> <% for user in @users %> > > > > >>>>>> <tr> > > > > >>>>>> <td><%= user.id <http://user.id> %></td> > > > > >>>>>> <td><%= user.name <http://user.name> %></td> > > > > >>>>>> <td><%= user.approval %></td> #current state of the > > user's > > > > >>>>>> approval status > > > > >>>>>> <td><%= f.radio_button :approval,'1' %>"Approve" </td> > > > > >>>>>> <td><%= f.radio_button :approval,'2' %>"Reject" </td> > > > > >>>>>> </tr> > > > > >>>>>> <% end %> > > > > >>>>>> <p> <%= f.submit "Submit" %> </p> > > > > >>>>>> <% end %> > > > > > >>>>>> --------- > > > > >>>>>> Error: > > > > >>>>>> undefined method `approval' for :user:Symbol > > > > -- > > > Nick Zadrozny > > --~--~---------~--~----~------------~-------~--~----~ SD Ruby mailing list [email protected] http://groups.google.com/group/sdruby -~----------~----~----~----~------~----~------~--~---
