我想弄清楚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'适合所有额外的结束'语句。
答案 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(没有联盟,只是一个很棒的产品)。它具有自动格式功能并突出显示语法错误,仅列举一些您可能感兴趣的功能。