2017-08-18 10 views
-1

私はここにいるので、私と優しくしてください。私はまだプログラミング、特にルビー言語の初心者です。ルビのこのコードは何をしていますか?

これはコンボボックスであり、私はそれを変更した後、またはそれが何の機能を呼び出すのかを知りたい。どこに行くのか、それが何をしているのか教えてください。おかげ

<p><%= f.select :done_ratio, ((0..100).step(1).to_a.collect {|r| ["#{r} %", r] }), :required => @issue.required_attribute?('done_ratio') %></p> 
+1

これは静的なドロップダウン要素を生成します。選択した値を変更すると、どこにも移動せず、関数を呼び出すこともありません。フォームを送信する場合にのみ、選択した選択肢が表示されます。 –

答えて

6

それは値を持つHTML select (dropdown) boxを、作成された:0 %1 %2 %、...、100 %

フィールドはフォームの一部として送信されます。 @issue.required_attribute?('done_ratio')の値に応じて、必要なフィールドであってもなくてもかまいません。 (これは、おそらく./app/models/issue.rbに見出すことができるIssueモデル、方法である。)

それを破壊:

  • (0..100) - これは(含む)0から100まで、Rangeオブジェクトを作成しています。
  • .step(1) - これは実際には必要ありません。あなたはそれを削除することができます。しかし、それは "一度に1つの範囲をステップスルー"(これはデフォルトである)と言っています。 RangeEnumeratorに変換します。
  • .to_a - これは実際には必要ありません。あなたはそれを削除することができます。これは、EnumeratorArrayに変換しています。
  • .collect {|r| ["#{r} %", r] } - Arrayを、[["0 %", 0], ["1 %", 1], ..., ["100 %", 100]]のような新しい配列リストにマッピングしています。 (両方のクラスがthis method from the Enumerable moduleが含まれているため、この方法はまた、RangeまたはEnumeratorオブジェクトに完全に正常に動作しますしたがって、なぜ上記の二つのステップが両方削除することができます。!)
  • f.select :done_ratio, (...) - これはと、done_ratioと呼ばれるHTML select要素を作成しています上記の名前/値。
関連する問題