0

我目前正在阅读 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 方法?

谢谢,迈克

4

1 回答 1

1

句子可能会被误解,但很简单:

  • 第一个值是名称,它仅用于视图中的选择元素
  • 第二个值id通过表单提交发送到服务器

Student.find(:all).collect {|s| [s.name, s.id]} 简单地创建一个数组数组:

[["Mike", 1],["John", 3], ["Mary", 8]]

此数组允许您创建选择 HTML 标记:

<option value="1">Mike</option>
<option value="3">John</option>
<option value="8">Mary</option>
于 2012-06-23T22:46:47.253 回答