【发布时间】:2014-08-31 11:11:05
【问题描述】:
我想在我的模型范围之一上返回自定义集合.. 但是我不知道为什么当我在我的 lambda 范围内使用 do end 块时它会显示错误.. 我正在使用 rails 4.1.0 和 ruby 2.1.2 ..
这是我的模型中的作用域代码:
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 do |match| 带有错误消息:SyntaxError: match.rb:15: syntax error, unexpected keyword_do_block, expecting 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 语法,因为它看起来比使用花括号更干净。你知道为什么会发生这个错误吗?
【问题讨论】:
-
您不能使用 do/end 除非您将范围参数括在括号中。这在此处有更详细的记录github.com/bbatsov/ruby-style-guide/issues/270
标签: ruby-on-rails ruby