2013-02-28 91 views
0

我正在使用CanCan进行授权,并且它工作正常,除了当我尝试设置名称中具有下划线的任何类的授权时留言板。例如,以下工作正常:CanCan在与下划线名称一起使用时出错

ability.rb

can [:read, :create, :destroy], Message do |message| 
     message.user_id == user.access_id 
     end 

,但是当我添加以下内容:

can [:create, :read], Message_board do |board| 
     board.user_id == user.access_id 
     end 

当我尝试做任何事情需要授权,我得到以下错误:

LoadError in TimelinesController#show 
Expected {app_name}/app/models/message_board.rb to define Message_board 

任何想法如何解决这个问题?谢谢!

+2

如果您不尊重约定,请不要期望框架能够工作 – apneadiving 2013-02-28 21:08:37

+0

您的Message_board类定义在哪里?我还建议坚持使用类名的默认CamelCase表示法。 – moonfly 2013-02-28 21:23:13

回答

1

关于如何解决这个问题的想法:不要在类名中使用下划线。我知道这听起来有点像老笑话中的医生(病人:“医生,当我做这个!”医生:“不要那样做。”),但实际上有一个背后的原因。

Rails对于命名约定非常有见地。预计类名称为驼峰案例(MessageBoardFooBarThing)。包含该类的文件是带下划线的小写版本(message_board.rbfoo_bar_thing.rb)。因为情况总是如此,Rails认为它'知道'如何从一个转换到另一个,因此它'知道'在哪里查找包含具有给定名称的类的文件。当名字不符合预期时,可能会出现问题。它可能是可能说服它以某种其他格式工作,但我可以想到没有理由这样做。

+0

我是一位铁轨小老板,对命名规则感到困惑,我想!整理权限中的代码,将它们称为MessageBoard等,现在它可以工作。感谢那。 – ecs 2013-02-28 21:46:33

相关问题