Rails - 写多少次'结束'在if / elsif / else语句中

时间:2015-10-09 03:00:11

标签: ruby syntax-error conditional

我想弄清楚Rails 4。

我正在使用CanCanCan获取能力,并且我的能力出现错误.rb。

相关错误认为我有一个额外的结束'在下面的区块?

 def initialize(user)

      alias_action :create, :read, :update, :destroy, :to => :crud

      alias_action :create, :read, :to => :cr

      alias_action :create, :read, :update, :to => :cru

      alias_action :update, :destroy, :to => :ud

    # Define abilities for the passed in user here. For example:
    #
    user ||= User.new # guest user (not logged in)

      new_registrant

      if user.try(:profile).present? && user.profile.has_role?(:pending)

      maintain_profile

    elsif user.try(:profile).present? && user.profile.has_role?(:student)

      student_abilities

    elsif  user.try(:profile).present? && user.profile.has_role?(:educator)

      educator_abilities


    elsif user.try(:profile).present? && user.profile.has_role?(:adviser)

      adviser_abilities


    elsif user.try(:profile).present? && user.profile.has_role?(:participant)

      participant_abilities

    elsif user.try(:profile).present? && user.profile.has_role?(:guest)

      guest_abilities

    elsif user.try(:profile).present? && user.profile.has_role?(:manager)

      manager_abilities

    else user.admin?
        can :manage, :all
    end

  end

我无法看到它的位置,我还有另一种方法(以类似的格式,在此方法之上,并且没有出现引用该方法的错误。

错误的行引用指向该块的最后一端。

让我想知道行引用是否可能是错误,问题在我定义角色的地方开始走高。相关的初始化声明是:

(NOT (A XOR B)) XOR C

我需要在这个块中有更多的结束语句吗?规则是什么?你需要一个'结束'对于每一个'如果'每一个“其他”的一端每个人都有一个结局?我认为只要有一个结束就足够了,如果'并且顶端的def为一端。

无法找到对此的引用 - 所有示例都只显示声明,而不是“ifs'适合所有额外的结束'语句。

2 个答案:

答案 0 :(得分:1)

can :cr, ProgramQuestions if can? :read, Programs

这是一个内联条件,它转换为:

if can? :read, Programs
  can :cr, ProgramQuestions
end

内联条件仅适用于同一行中的代码,并且不需要end。所以,你没有额外的end - 你有太多的end

答案 1 :(得分:0)

代码

else user.admin?
    can :manage, :all
end

无效。你可能想要:

elsif user.admin?
    can :manage, :all
end

修改

大量此代码并不完全正确。我认为其中很大一部分可以通过格式化来解决。其他部分需要调整为有效的语法。如果使用带有if的参数限定方法调用,则最好用括号括起参数。此外,您还有一个逗号。将上面的代码更改为如下所示:

def program_qanda
  # can ask questions on programs
  # TO DO: create this 
  can( :cr, ProgramQuestions ) if can?( :read, Programs )
  can( :read, ProgramAnswers ) if can?( :read, ProgramQuestions ) 
  can( :ud, ProgramQuestions.user_question.unanswered )
  #can read answer to Q     
end

然后浏览整个班级,随着时间的推移纠正格式和语法。使用IDE可能对学习过程有所帮助。我个人喜欢RubyMine(没有联盟,只是一个很棒的产品)。它具有自动格式功能并突出显示语法错误,仅列举一些您可能感兴趣的功能。