2014-08-31 70 views
4

我想返回自定义集合在我的模型范围之一.. 但我不知道为什么它显示错误时,我使用做我的lambda范围内的结束块.. 我是使用Rails 4.1.0和2.1.2的红宝石..Rails模型块内lambda范围错误

这里是我的模型在我的范围代码:

scope :date, -> (from_date, to_date) do 
    buff_matches = where match_start_time: from_date..to_date 
    matches = {} 
    buff_matches.each do |match| 
    buff_date = match.match_start_time.to_date.to_s 
    matches[buff_date] ||= [] 
    matches[buff_date] << match 
    end 
    matches 
end 

它会显示在这条线的错误:buff_matches.each做|比赛|带有错误消息:SyntaxError:match.rb:15:语法错误,意外的keyword_do_block,期待keyword_end。

但是,如果我改变我的代码是这样的:

scope :date, -> (from_date, to_date) do 
    buff_matches = where match_start_time: from_date..to_date 
    matches = {} 
    buff_matches.each { |match| 
    buff_date = match.match_start_time.to_date.to_s 
    matches[buff_date] ||= [] 
    matches[buff_date] << match 
    } 
    matches 
end 

它将正常工作。我想用do end语法,因为它看起来比使用大括号更干净。你有什么想法为什么发生这个错误?

+0

除非你在括号括起来的范围参数不能使用做/结束这种修复它,并使用do..end块。这在这里有更详细的记录https://github.com/bbatsov/ruby-style-guide/issues/270 – infused 2014-09-01 06:11:11

回答

1

看起来好像你碰到了一个边缘情况。我真的不能解释为什么它失败,但

scope :date, lambda do |from_date, to_date| 
    buff_matches = where match_start_time: from_date..to_date 
    matches = {} 
    buff_matches.each do |match| 
    buff_date = match.match_start_time.to_date.to_s 
    matches[buff_date] ||= [] 
    matches[buff_date] << match 
    end 
    matches 
end 
+0

不幸的是,当我使用这段代码时,会出现另一个错误。 错误消息是:*引发ArgumentError:尝试没有一个块创建对象PROC * 我可以由surpress涡卷误差拉姆达内部撑杆像这里的解决方案: http://stackoverflow.com/questions/16016668/范围 - 丁错误消息引发ArgumentError-试图对创建-PROC-对象而不-A-BLO – mario 2014-08-31 16:38:39