如何从rails3控制器中的复选框获取参数

时间:2012-03-14 13:58:25

标签: ruby-on-rails ruby-on-rails-3 checkbox

这是我的代码:

<%=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同名的复选框。 我可以通过参数[:user_group_id]成功获取参数,如果用户只选中了一个框。但是如果他真的检查了其中几个,那么如何在控制器中设置这个值?在这种情况下,params [:user_group_id]只能获得其中一个。我完全相信代码:params [:user_group_id_ + XXX.id]不会起作用....

2 个答案:

答案 0 :(得分:5)

如果你用user_group_id['+ug.id+']之类的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。

答案 1 :(得分:0)

如果你这样做&lt;%= check_box_tag'user_group_id []'%&gt;它返回了所选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}%>