2013-08-04 48 views
0

如果我做的:模塊如何在控制器內部工作?

rails generate scaffold account/user username 

我得到一個控制器,它看起來像這樣:

class Account::UsersController < ApplicationController 
    def index 
    @account_users = Account::User.all 
    end 
... 
end 

如果我包括賬戶模塊,那麼它看起來像所有的數據庫調用不需要是前綴爲「Account ::」。即

class Account::UsersController < ApplicationController 

    include Account 

    def index 
    @account_users = User.all #this works because I included the Account Module above 
    end 
... 
end 

現在,如果我將我的

控制器/帳號/ users_controller.rb

文件:

控制器/ 管理 /account/users_controller.rb

該文件看起來像這樣(注意:在此移動後,我還糾正了我的路線文件):

class Admin::Account::UsersController < ApplicationController 

    include Account 

    def index 
    @account_users = User.all #this call does not work now 
    end 
... 
end 

,但我得到一個錯誤說「未初始化的不斷聯繫::帳戶:: UsersController ::用戶」

它看起來像Rails是努力讓自己在「用戶」模型數據庫調用,而不在它前面的「Account ::」模塊。

那麼如何在控制器中包含模塊?爲什麼當我將我的控制器移動到不同的文件(並將模型放置在生成的腳手架的相同位置)時這不起作用,但它可以與腳手架生成的文件一起使用?我該如何解決這個問題?

+0

[在模型中使用不同文件夾結構時在控制器中包含模塊?](http://stackoverflow.com/questions/18026421/including-a-module-in-a-controller-when -using-a-different-folder-structure-for-t) – Benj

+0

我已經在你的其他重複問題中爲你提供了一個完整的答案。您無法在models/account/user.rb中找到':: User'模型 – Benj

回答

0

我想我沒有意識到你可以明確地要求你想包含的模塊的路徑。我在閱讀完模塊後學到了更多...

因此,在控制器類的外部添加一個顯式調用「require'account/user'」,使得它包含控制器中的模塊。

0

解析模塊的名稱是相對於當前模塊完成的。試着將其更改爲:

include ::Account 

include ::Admin::Account 

(取決於在你的用戶模型中定義的模塊上)

這將告訴紅寶石的全局命名空間看模塊Account

+0

嘗試'include :: Account'時仍出現同樣的錯誤。 – MichaelHajuddah

+0

您的用戶模型定義在哪裏?它在':: Admin :: Account'中嗎?如果是的話,你應該包括它。 – davidrac

+0

我在「models/account/user.rb」中定義了我的用戶模型。基本上我希望模型與腳手架產生的位置保持一致,但控制器的位置與產生的腳手架位置不同。這樣我可以有多個控制器/命名空間引用相同的模型。 – MichaelHajuddah

相關問題