我有方法,它显示错误: “语法错误,意外的输入结束,期待keyword_end”。我犯了什么错误?
def clicked(p,u)
if (Like.where(post_id: p.id).empty?)
return false
else
posts=Like.where(post_id: p.id)
if ((posts.length<1) && (posts[0].user_id==u.id) && (posts[0].action!=nil))==true then return true
else
if ((posts.length<1) && (posts[0].user_id!=u.id)) then return false
else posts.each do |i|
if (i.user_id==u.id) then return true
end
end
end
end
end
答案 0 :(得分:1)
posts.each
应使用end
关键字
def clicked(p,u)
if (Like.where(post_id: p.id).empty?)
return false
else
posts=Like.where(post_id: p.id)
if ((posts.length<1) && (posts[0].user_id==u.id) && (posts[0].action!=nil))==true then return true
else
if ((posts.length<1) && (posts[0].user_id!=u.id)) then return false
else
posts.each do |i|
if (i.user_id==u.id) then return true
end
# The missing end
end
end
end
end
end
答案 1 :(得分:0)
为了让您和其他人更容易发现此类问题,请避免使用&#34; if .... then&#34; Ruby&#39> if 语句的形式,特别是与&#34; else&#34;单独一行的条款。另外,避免将代码放在与&#34; else&#34;相同的行上。关键词。而不是:
if some_condition then do_something
else
do_something_else
end
或者这个:
if some_condition
do_something
else do_something_else
end
更喜欢这个:
if some_condition
do_something
else
do_something_else
end
使用这些相当标准的格式化实践会使这类语法错误更容易避免,并且在发生时更容易调试。