我目前正在阅读 Learning Rails 3。我正在研究一个可以创建学生和奖励的示例。一个学生有_许多奖项和奖项属于_学生。
在 app/views/awards/_form.html.erb 部分代码如下所示:
<div class="field">
<%= f.label :student_id %><br />
<%= f.select :student_id, Student.find(:all).collect {|s| [s.name, s.id]} %>
</div>
这本书解释了这个代码是这样的:
“这就是 collect 方法有用的地方。它需要一个块作为参数 ({})。|s| 是一种非常简短的说法,即 Ruby 应该循环遍历学生集合并将每一行放入一个名为 s 的变量中. 在循环的每次迭代中,块将返回一个数组,包含在 [ 和 ] 中。这些数组中的每一个将成为选择列表中的行,将有两个值。第一个是学生的名字。该值将显示给用户。第二个是学生的 id 值,该值将是从表单返回到服务器的值。
我的问题是关于最后一句话。为什么以及如何从表单返回第二个值到服务器?为什么不是第一个值呢?将数组 [s.name, s.id] 发送到 collect 方法的目的是什么,为什么需要这个 collect 方法?
谢谢,迈克