2017-08-18 63 views
-1

我是新來的,所以請對我溫柔,我仍然只是編程方面的新手,尤其是在Ruby語言中。這個代碼在ruby中做了什麼?

這是一個組合框,我想知道它在哪裏改變或它調用了什麼功能。你能告訴我它在哪裏或它做了什麼?感謝

<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')的值。 (這大概是在Issue模型,它可以在./app/models/issue.rb可以找到一種方法)

其分解:

  • (0..100) - 這是創建Range對象,從0到100(含)。
  • .step(1) - 這實際上並不需要;你可以刪除它。但它是說「一次只能在1範圍內」(這是默認情況下)。它將Range轉換爲Enumerator
  • .to_a - 這實際上並不需要;你可以刪除它。這將Enumerator轉換爲Array
  • .collect {|r| ["#{r} %", r] } - 這將Array映射到一個新的數組列表,如:[["0 %", 0], ["1 %", 1], ..., ["100 %", 100]]。 (此方法也將工作一RangeEnumerator對象上完全沒有問題,因爲兩個類包括this method from the Enumerable module因此,爲什麼上述兩個步驟都可以被除去。!)
  • f.select :done_ratio, (...) - 這是創建HTML select元件稱爲done_ratio,與上述名稱/值。