Ruby on Rails 语法错误,意外的 '\n',应为 &。或 :: 或 '[' 或 '.'
Ruby on Rails syntax error, unexpected '\n', expecting &. or :: or '[' or '.'
我有一个模块有这个错误:
... /gather_descendants.rb:39: syntax error, unexpected '\n', expecting &.
or :: or '[' or '.'
如果我从第 34-39 行注释掉整个 for 循环,错误就会消失,但是如果我从第 36-38 行注释掉其中的 unless 块,它仍然存在。
module GatherDescendants
def gather_descendants_for(id)
@descendants = Comment.select{ |item| item[:parent_id] == id }
end
def make_hash_tree_for(arr)
has_parent = Set.new
all_items = {}
arr.each do |comm|
parent = arr.find { |c| c.id ==comm.parent_id }
# if parent not in all_items
if all_items.select { |c| c.id == comm.parent_id }.size == 0
# all_items[parent] = {}
all_items[parent] = {}
end
# if child not in all_items
if all_items.select { |c| c.id == comm.parent_id }.size == 0
# all_items[child] = {}
all_items[comm] = {}
end
# all_items[parent][child] = all_items[child]
all_items[parent][comm] = all_items[comm]
# has_parent.add(child)
has_parent.add(comm)
result = {}
# for key, value in all_items
for all_items.each do |key, value| # <-- line 32
# if key not in has_parent
unless has_parent.key?(key) # <-- line 36
result[key] = value
end # <-- line 38
end # <-- line 39
end
@tree = result
end
end
知道是什么原因造成的吗?
根据描述和共享的代码片段,它表明您正在使用两种不同的独立方式组合在单个数组上对其进行迭代。
for all_items.each do |key, value| # <-- line 32
上一行显示您首先使用 for 然后您还在 all_items 数组中指定了每个。
要使其正常工作,只需删除 for 关键字,因为无论如何您也可以使用每个关键字来完成此操作。
all_items.each do |key, value| # <-- line 32
使用上面修改的行,不会出现语法错误。
如果您将其用作索引和值。您必须使用 each_with_index
all_items.each_with_index do |key, value|
我有一个模块有这个错误:
... /gather_descendants.rb:39: syntax error, unexpected '\n', expecting &. or :: or '[' or '.'
如果我从第 34-39 行注释掉整个 for 循环,错误就会消失,但是如果我从第 36-38 行注释掉其中的 unless 块,它仍然存在。
module GatherDescendants
def gather_descendants_for(id)
@descendants = Comment.select{ |item| item[:parent_id] == id }
end
def make_hash_tree_for(arr)
has_parent = Set.new
all_items = {}
arr.each do |comm|
parent = arr.find { |c| c.id ==comm.parent_id }
# if parent not in all_items
if all_items.select { |c| c.id == comm.parent_id }.size == 0
# all_items[parent] = {}
all_items[parent] = {}
end
# if child not in all_items
if all_items.select { |c| c.id == comm.parent_id }.size == 0
# all_items[child] = {}
all_items[comm] = {}
end
# all_items[parent][child] = all_items[child]
all_items[parent][comm] = all_items[comm]
# has_parent.add(child)
has_parent.add(comm)
result = {}
# for key, value in all_items
for all_items.each do |key, value| # <-- line 32
# if key not in has_parent
unless has_parent.key?(key) # <-- line 36
result[key] = value
end # <-- line 38
end # <-- line 39
end
@tree = result
end
end
知道是什么原因造成的吗?
根据描述和共享的代码片段,它表明您正在使用两种不同的独立方式组合在单个数组上对其进行迭代。
for all_items.each do |key, value| # <-- line 32
上一行显示您首先使用 for 然后您还在 all_items 数组中指定了每个。
要使其正常工作,只需删除 for 关键字,因为无论如何您也可以使用每个关键字来完成此操作。
all_items.each do |key, value| # <-- line 32
使用上面修改的行,不会出现语法错误。
如果您将其用作索引和值。您必须使用 each_with_index
all_items.each_with_index do |key, value|