如何从相关复选框列表中创建对象数组?

时间:2013-03-06 16:19:32

标签: ruby-on-rails-3 model-view-controller routing checkbox

首先,我已经做了相当多的环顾四周,虽然问题得到了解答,但我认为这个问题有些独特。我有一个使用以下代码生成的复选框列表:

<% for student in Student.find(:all) %>
    <div>
    <%= check_box_tag "user[student_ids][]", student.id, current_user.students.include    (student) %>
    <%= student.name %>
    </div>
<% end %>

点击底部的“更新”按钮后,我需要将每个复选框放入一个数组中。然后我计划迭代数组并对每个已检查的名称进行一些工作。但是,我很难将这些名称全部放入数组中。我真的不确定这种工作应该是哪种标准网络动作(即发布,获取等),所以我不知道如何设置路由。即使我可以设置一个到控制器的路径,我如何让被检查的学生进入一系列Student对象?

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

你的问题的完整答案取决于各种各样的事情,例如,你试图用提交的数组做什么等(这将决定是否应该使用POST,GET,PUT或DELETE。)不知道有关您的代码库的更多信息,如果您将以下代码放入控制器已经安静的路径中的form_for中,您应该能够看到已检查名称的数组:

<%= current_user.students.include(student).each do |student| %>
    <div>
        <%= check_box_tag "student_names[]", student.name %> <%= label_tag student.name %>
    </div>
<% end %>

然后,当用户点击提交时,params哈希将显示student_names = []。

确保您的属性可以根据需要访问。

另一方面,请查看上周的Railscasts专业剧集。几乎可以准确地解释你想要做什么。不过,这是订阅服务。

答案 1 :(得分:0)

我设法以一种不太令人满意的方式解决了我的问题。这是我最终使用的代码:

current_user.students.delete_all
  if(params.has_key? :user)
     params[:user][:student_ids].each do |i|
        current_user.students<<(Student.find(i))
     end
  end

因为我管理的学生人数不会超过100,所以此操作并不像看上去那么糟糕。我正在删除已经存在的所有关联,然后循环遍历所有传递的参数。然后,我找到带有传递参数id的student对象,并将其添加到current_user的User-Student连接表中。

我希望这有助于某人下线!