我不了解最终关键字的使用情况

时间:2014-05-23 18:51:19

标签: ruby-on-rails ruby

我对关键字end感到非常困惑。例如,在下面的代码中,我试图定义一个我自己的帮助器方法但是我得到了太多的SyntaxErrors,因为我错过了一些目的。我添加了一些它的作品,但是...我不明白为什么我必须把它们放在一起,阻止它们关闭。

我用多个问号标记了它们。

谢谢你们!

 module ApplicationHelper

      def notice_color(notice)
        if notice
            type = type_notice(notice)
            div_tag_head = "<div class=\"alert alert-#{type} alert-dismissable\">"
            cross_button = "<button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-hidden=\"true\">&times;</button>"
            notice_tag = div_tag_head + cross_button + notice + "</div>"
            notice_tag.to_s.html_safe
        end # If's end.
      end   # Def's end.

    def type_notice(notice)
        downcased = notice.downcase
        if downcased.include? 'error' or downcased.include? 'invalid'
          return'danger'
        else if downcased.include? 'done' or downcased.include? 'success'
          return 'success'
        else if downcased.include? 'hey'
          return 'warning'
        else 
          return 'info'
        end # If's end.
      end #Def's end
    end # ?????? <------ First

      private :type_notice
    end # ??????? <------ Second
    end # Module's end

2 个答案:

答案 0 :(得分:7)

您的问题出在if区块中。 Ruby语法为elsif而非else if

if downcased.include? 'error' or downcased.include? 'invalid'
  return'danger'
elsif downcased.include? 'done' or downcased.include? 'success'
  return 'success'
elsif downcased.include? 'hey'
  return 'warning'
else 
  return 'info'
end

您的两个else if行实际上是开始两个新的if语句,因此您需要额外的end几个。

答案 1 :(得分:0)

正如格雷姆所说,请谨慎使用elsif代替else if

但是,缩进也可能在混乱中发挥作用。如果您正在使用Sublime Text,请检查Preferences.sublime-settings文件,并确保其中有一行显示"tab_size": 2"tab_size": n(n是您的任何号码)很舒服,虽然2是事实上的行业标准)。如果代码位于哈希中间,请小心在代码后面添加逗号。

要访问首选项文件,请在Sublime Text中按Shift + Command + p(在Apple上),然后输入&#39; user,&#39;或找到“首选项”菜单选项,然后选择“设置 - 用户”。