2012-03-14 42 views
3

这里是我的代码:如何从复选框PARAMS在Rails3中控制器

<%=form_tag('/user_group_follows/follow',:id=>'follow_select_form',:remote=>true,:method=>:get) do %> 
    <p>You want to add this user to?</p> 
    <%=hidden_field_tag 'user_id',@user.id%> 
    <%@user.user_groups.each do |ug|%> 
     <%=check_box_tag 'user_group_id',ug.id,false,{:id=>'user_group_id_'+ug.id.to_s}%><%=ug.name%><br/> 
    <%end%> 
<%end%> 
//using jquery-ui, so there is no submit button.... 

我想对用户进行多重选择,以决定他/她想加入到下面的列表哪个组。

所以我做了几个复选框具有相同的名称为“user_group_id”和不同的ID。 我能顺利拿到throught PARAMS的PARAMS [:user_group_id],如果用户只检查一个盒子。但是,如果他真的检查了其中的几个,如何获得这个值设置在控制器?在这种情况下,params [:user_group_id]只能获得其中一个。我相信这样的代码:params [:user_group_id_ + XXX.id]是不会工作的....

回答

5

如果你把它们命名为ID为user_group_id['+ug.id+'],我认为你应该得到像params[:user_group_id]这样的参数应该包含一个检查的所有组的ID的数组。

这样的事情,不知道到底,但基本上你希望把你的领域,使得它们的他们是如何命名的自然组合成一个阵列,凭借:

<%=check_box_tag 'user_group_id['+ug.id']',ug.id,false,{:id=>'user_group_id_'+ug.id.to_s}%><%=ug.name%> 

所以,params[:user_group_id].first将包含所选第一个复选框的ID。

+0

EM去...我认为这是不工作,则params [:user_group_id] 。首先只返回1,但实际上预期user_group_id应为28和29 ... – 2012-03-15 07:33:29

+1

好了,我已经知道了,代码应该是:<%= check_box_tag“user_group_id []”%>,以便Rails会认识PARAMS [:user_group_id]作为数组!还是要谢谢你,你的回答确实有很大的暗示! – 2012-03-15 08:12:16

+0

是的!而已。真高兴你做到了。 – jefflunt 2012-03-15 13:08:28

0

如果以这种方式<%= check_box_tag 'user_group_id []' %>它返回选定的ID阵列,

<%=check_box_tag 'user_group_id',ug.id, params[:user_group_id].try(:include?,ug.id.to_s),{:id=>'user_group_id_'+ug.id.to_s}%>