这个if结构有什么问题?

时间:2015-12-24 01:09:47

标签: ruby

我有方法,它显示错误: “语法错误,意外的输入结束,期待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

2 个答案:

答案 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

使用这些相当标准的格式化实践会使这类语法错误更容易避免,并且在发生时更容易调试。