2015-11-04 87 views
1

所以我接下來的教程有一個很好的方法來構建一個選擇多年的下拉選擇菜單。在這個select標籤助手中,爲什麼.push?

導師非常故意在下面的第6行代碼中使用.push。 爲什麼?它會推動什麼?我從來沒有見過使用它的這種方式。

# payment.rb 
def self.year_options 
    (Date.today.year..(Date.today.year+10)).to_a 
end 

# new.html.erb 
<%= p.select :card_expires_year, 
     options_for_select(Payment.year_options.push),                 
     {include_blank:'Year'}, 
     'data-stripe'=>'exp-year', 
     class:'form-control', 
     required:true 
%> 
+0

好問題。我想知道同樣的事情。 – jeznag

回答

1

不知道爲什麼.push正在這裏使用。 The point of push is to add elements to an array.。實際上,這種方法在這裏什麼都不做,你可以撥打Payment.year_options而不用.push

irb(main):003:0> options = (Date.today.year..(Date.today.year+10)).to_a 
=> [2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025] 
irb(main):004:0> options.push 
=> [2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025] 
+0

謝謝 - 以爲有可能會有一些未知的巫術發生在 – dwilbank

1

它什麼也沒做。在您的導軌控制檯中試用它:

pry(main)> [1,2,3].push 
=> [1, 2, 3] 

只需將其刪除即可。

如果你不知道,推的目的是將元素添加到陣列 - 所以我們可以這樣做:

[1,2,3].push(4) 
=> [1, 2, 3, 4] 

,它會增加4到我們的數組。不帶參數推送?沒有意義。

1

我看不出有任何理由這樣做。 Array#push用於將元素追加到數組。在沒有給出參數的情況下,對初始數組沒有影響。

一個可能的使用情況(這並不適用於這裏)是,如果Payment.year_options是一個ActiveRecord::Relation其中.push將其評價爲數組(但它仍然是做一個奇怪的方式)。

+1

啊 - 這就解釋了爲什麼教練可能已經習慣了這種習慣,儘管在這種情況下它不是ActiveRecord對象 - 謝謝! – dwilbank