2012-06-23 33 views
0

我正在閱讀Learning Rails 3.我正在研究一個可以創建學生和獎勵的示例。一名學生擁有多個獎項並授予belongs_to學生。有關Learning Rails示例的代碼3

在app /視圖/獎勵/ _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> 

書中解釋了這種代碼:

「這也正是收集方法它以塊爲參數({}),| s |是一種非常簡短的方式,表示Ruby應該遍歷學生集合並將每行放入一個名爲s的變量中。循環中,塊將返回一個包含在[和]中的數組,這些數組中的每一個將成爲選擇列表中的行,它們將有兩個值:第一個是stude的名稱nt ..該值將顯示給用戶。第二個是學生的id值,並且該值將從表單返回到服務器。「

我的問題是關於最後一句。爲什麼以及如何從窗體返回第二個值服務器?爲什麼不是第一個值?以及將數組[s.name,s.id]發送到collect方法的目的以及爲什麼需要這種收集方法?

謝謝, 邁克

回答

1

句子可能會被誤解,但它很簡單:

  • 第一值名稱並且它在視圖
  • 二值ID被髮送到服務器表單提交

Student.find使用僅在選擇元件(:所有).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>