0

我正在使用 CanCan 进行授权,它工作正常,除非我尝试为名称中带有下划线的任何类设置授权,例如 message_board。例如,以下工作正常:

能力.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

知道如何解决这个问题吗?谢谢!

4

1 回答 1

1

关于如何解决这个问题的想法:不要在类名中使用下划线。

我知道这听起来有点像老笑话里的医生(病人:“医生,我这样做的时候很痛 ”医生:“不要那样做。”),但实际上是有原因的。

Rails 对命名约定非常固执。类名应为大写驼峰式 ( MessageBoard, 或FooBarThing)。包含该类的文件是带下划线的小写版本(message_board.rbfoo_bar_thing.rb)。因为总是如此,Rails 认为它​​“知道”如何从一个转换到另一个,因此它“知道”到哪里查找包含具有给定名称的类的文件。当名称不符合预期时,可能会出现问题。可能有可能说服它以其他格式工作,但我认为没有理由这样做。

于 2013-02-28T21:24:45.427 回答