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 という名前の変数に入れる必要があることを示す非常に簡単な方法です。 . ループの各反復で、ブロックは [ と ] に含まれる配列を返します. 選択リストの行になるこれらの配列のそれぞれには、2 つの値があります. 最初の値は生徒の名前です..その値はユーザーに表示されます。2 番目は学生の ID 値で、その値がフォームからサーバーに返されます。」

私の質問は最後の文についてです。フォームからサーバーに 2 番目の値が返される理由と方法は? 最初の値も同様にしないのはなぜですか? そして、配列 [s.name, s.id] を collect メソッドに送信する目的は何ですか? なぜこの collect メソッドが必要なのですか?

ありがとう、マイク

4

1 に答える 1

1

文は誤解される可能性がありますが、簡単です。

  • 最初の値は名前で、ビューの選択要素でのみ使用されます
  • 2 番目の値IDは、フォーム送信でサーバーに送信されます

Student.find(:all).collect {|s| [s.name, s.id]} シンプルな配列の配列を作成します:

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

この配列を使用すると、select HTML タグを作成できます。

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