首先,我已经做了相当多的环顾四周,虽然问题得到了解答,但我认为这个问题有些独特。我有一个使用以下代码生成的复选框列表:
<% 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对象?
提前感谢您的帮助!
答案 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连接表中。
我希望这有助于某人下线!