0

首先,我已经进行了大量的环顾四周,虽然问题得到了答案,但我有一个我认为有些独特的问题。我有一个使用以下代码生成的复选框列表:

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

单击底部的“更新”按钮后,我需要将每个选中的框放入一个数组中。然后我计划遍历数组并对每个检查的名称做一些工作。但是,在将这些名称全部放入数组的过程中,我遇到了困难。我真的不确定这种工作应该是哪些标准的网络操作(即发布、获取等),所以我不知道如何设置路由。即使我可以设置到控制器的路由,我如何将检查的学生放入一组学生对象中?

提前感谢您的帮助!

4

2 回答 2

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 %>

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

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

在旁注中,请查看上周的 Railscasts 专业集。几乎完全解释了你想要做什么。不过,这是一项订阅服务。

于 2013-03-06T16:39:21.863 回答
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 的学生对象,并将其添加到 current_user 的 User-Student 连接表中。

我希望这可以帮助某人!

于 2013-04-10T22:42:19.270 回答