在这个select标签帮助器中,为什么是.push?

时间:2015-11-04 21:50:25

标签: ruby-on-rails

因此,我所遵循的教程有一个很好的方法来构建一个用于选择年份的下拉选择菜单。

教师非常故意在下面的第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
%>

3 个答案:

答案 0 :(得分: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]

答案 1 :(得分:1)

它什么都不做。在rails控制台中尝试一下:

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

删除它。

如果你不知道,推送的目的是为数组添加一个元素 - 所以我们可以这样做:

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

并且它会向我们的数组添加4。没有参数推?没有意义。

答案 2 :(得分:1)

我没有看到任何理由这样做。 Array#push用于将元素追加到数组中。在没有给出参数的情况下,对初始数组没有影响。

一个可能的用例(此处不适用)是Payment.year_optionsActiveRecord::Relation,其中.push会将其评估为数组(但它仍然是一种奇怪的方式做它)。