2013-02-28 44 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