Please could someone suggest what might be wrong here. In my view I''m displaying a series of check boxes and when the form is submitted I want the controller to iterate over the values and contatenate them all into a string "1" if the box was checked and "0" if it wasn''t. I''m new to Ruby and Rails and I can''t seem to get any values out of my params other than "0", Here''s my code: View: <%= form_tag :action=>''save_question''%> <h3><%= @question.title %></h3> </br> <% for option in @options %> <input type="checkbox" name="option[]" value="<%=option.id%>"><%= option.option_text %></br> <% end %> </br> <%= submit_tag%> <%= end_form_tag%> Controller: def save_question @options = Option.find_all_by_question_id(session[:question_id]) response = "" for option in @options do if params[:option][option.id]=="1" response << "1" else response << "0" end end end -- Posted via ruby-forum.com.
I did something similar recently. Here is the code from my controller that pulled out the items that were checked and saved them: obj_keys = [] params[:objective].each_key {|k| obj_keys.push( k ) if @params[:objective][k].to_i == 1} @course.objectives = Objective.find( obj_keys ) Aaron On 6/4/06, Martin Robinson <martinr@4elements.co.uk> wrote:> > Please could someone suggest what might be wrong here. In my view I''m > displaying a series of check boxes and when the form is submitted I want > the controller to iterate over the values and contatenate them all into > a string "1" if the box was checked and "0" if it wasn''t. > I''m new to Ruby and Rails and I can''t seem to get any values out of my > params other than "0", > > Here''s my code: > > > View: > > > <%= form_tag :action=>''save_question''%> > <h3><%= @question.title %></h3> > </br> > <% for option in @options %> > <input type="checkbox" name="option[]" value="<%=option.id%>"><%> option.option_text %></br> > <% end %> > </br> > <%= submit_tag%> > <%= end_form_tag%> > > > > Controller: > > def save_question > > @options = Option.find_all_by_question_id(session[:question_id]) > response = "" > for option in @options do > if params[:option][option.id]=="1" > response << "1" > else > response << "0" > end > end > end > > > -- > Posted via ruby-forum.com. > _______________________________________________ > Rails mailing list > Rails@lists.rubyonrails.org > lists.rubyonrails.org/mailman/listinfo/rails >-------------- next part -------------- An HTML attachment was scrubbed... URL: wrath.rubyonrails.org/pipermail/rails/attachments/20060605/d7f56ce6/attachment.html
Your problem is probably because of what you set "value" to be. I think if you exam your params <%= debug params %> you will see that the option is returning the value that you are setting its ''checked value'' to. Secondly, if there were 15 check boxes, they are all named the same thing, so as far as my understanding goes, each checkbox will overwrite itself. May I recommend this in your view? <%= form_tag :action=>''save_question''%> <h3><%= @question.title %></h3> </br> <% for option in @options %> <input type="checkbox" name="option[<%= option.id %>]" value="1"><%option.option_text %></br> <% end %> </br> <%= submit_tag%> <%= end_form_tag%> Then your controller can do this... @options = Option.find_all_by_question_id(session[:question_id]) response = "" for option in @options do response << params[:options][option.id.to_s] end end Haven''t tested this code, but it should work. -hampton. On 6/4/06, Martin Robinson <martinr@4elements.co.uk> wrote:> > Please could someone suggest what might be wrong here. In my view I''m > displaying a series of check boxes and when the form is submitted I want > the controller to iterate over the values and contatenate them all into > a string "1" if the box was checked and "0" if it wasn''t. > I''m new to Ruby and Rails and I can''t seem to get any values out of my > params other than "0", > > Here''s my code: > > > View: > > > <%= form_tag :action=>''save_question''%> > <h3><%= @question.title %></h3> > </br> > <% for option in @options %> > <input type="checkbox" name="option[]" value="<%=option.id%>"><%> option.option_text %></br> > <% end %> > </br> > <%= submit_tag%> > <%= end_form_tag%> > > > > Controller: > > def save_question > > @options = Option.find_all_by_question_id(session[:question_id]) > response = "" > for option in @options do > if params[:option][option.id]=="1" > response << "1" > else > response << "0" > end > end > end > > > -- > Posted via ruby-forum.com. > _______________________________________________ > Rails mailing list > Rails@lists.rubyonrails.org > lists.rubyonrails.org/mailman/listinfo/rails >-------------- next part -------------- An HTML attachment was scrubbed... URL: wrath.rubyonrails.org/pipermail/rails/attachments/20060605/9fff13e0/attachment.html
Hampton wrote:> Your problem is probably because of what you set "value" to be. > > I think if you exam your params <%= debug params %> you will see that > the > option is returning the value that you are setting its ''checked value'' > to. > > Secondly, if there were 15 check boxes, they are all named the same > thing, > so as far as my understanding goes, each checkbox will overwrite itself. > > May I recommend this in your view? > > <%= form_tag :action=>''save_question''%> > <h3><%= @question.title %></h3> > </br> > <% for option in @options %> > <input type="checkbox" name="option[<%= option.id %>]" value="1"><%> option.option_text %></br> > <% end %> > </br> > <%= submit_tag%> > <%= end_form_tag%> > > Then your controller can do this... > > @options = Option.find_all_by_question_id(session[:question_id]) > response = "" > for option in @options do > response << params[:options][option.id.to_s] > end > end > > Haven''t tested this code, but it should work. > > -hampton.Thanks for that - I''ve got it working now. i took your suggestions, but for some reason if a checkbox isn''t checked a value doesn''t get returned so if I use the code> for option in @options do > response << params[:options][option.id.to_s] > endI get a nil object error for unchecked checkboxes. The actual code I got working is for option in @options do if params[:option][option.id.to_s]=="1" response << params[:option][option.id.to_s] else response << "0" end end and the view code worked just as you said. -- Posted via ruby-forum.com.
Actually, I believe the helper works like this. <input type="checkbox" name="option[<%= option.id %>]" value="1"> <input type="hidden" name="option[<%= option.id %>]" value="0"> <%= option.option_text %></br> That should return a 0 value if unchecked. -hampton. On 6/5/06, Martin Robinson <martinr@4elements.co.uk> wrote:> Hampton wrote: > > Your problem is probably because of what you set "value" to be. > > > > I think if you exam your params <%= debug params %> you will see that > > the > > option is returning the value that you are setting its ''checked value'' > > to. > > > > Secondly, if there were 15 check boxes, they are all named the same > > thing, > > so as far as my understanding goes, each checkbox will overwrite itself. > > > > May I recommend this in your view? > > > > <%= form_tag :action=>''save_question''%> > > <h3><%= @question.title %></h3> > > </br> > > <% for option in @options %> > > <input type="checkbox" name="option[<%= option.id %>]" value="1"><%> > option.option_text %></br> > > <% end %> > > </br> > > <%= submit_tag%> > > <%= end_form_tag%> > > > > Then your controller can do this... > > > > @options = Option.find_all_by_question_id(session[:question_id]) > > response = "" > > for option in @options do > > response << params[:options][option.id.to_s] > > end > > end > > > > Haven''t tested this code, but it should work. > > > > -hampton. > > Thanks for that - I''ve got it working now. i took your suggestions, but > for some reason if a checkbox isn''t checked a value doesn''t get returned > so if I use the code > > > for option in @options do > > response << params[:options][option.id.to_s] > > end > > I get a nil object error for unchecked checkboxes. > > The actual code I got working is > > for option in @options do > if params[:option][option.id.to_s]=="1" > response << params[:option][option.id.to_s] > else > response << "0" > end > end > > and the view code worked just as you said. > > -- > Posted via ruby-forum.com. > _______________________________________________ > Rails mailing list > Rails@lists.rubyonrails.org > lists.rubyonrails.org/mailman/listinfo/rails >