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

ファイルへのファイル:

controllers/ admin /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

しかし、「初期化されていない定数 Admin::Account::UsersController::User」というエラーが表示されます

Rails は、「Account::」モジュールを前に付けずに「User」モデルでデータベース呼び出しを行おうとしているようです。

では、コントローラーにモジュールを含めるとどのように機能するのでしょうか? コントローラーを別のファイルに移動すると (そして生成されたスキャフォールドからモデルを同じ場所に置いたままにすると)、なぜこれが機能しないのに、スキャフォールドで生成されたファイルでは機能するのですか? この問題を解決するにはどうすればよいですか?

4

2 に答える 2

0

モジュールの名前の解決は、現在のモジュールに対して相対的に行われます。次のように変更してみてください。

include ::Account

また

include ::Admin::Account

(ユーザーモデルが定義されているモジュールによって異なります)

これにより、モジュールのグローバル名前空間を調べるように ruby​​ に指示されます。Account

于 2013-08-04T19:25:44.387 に答える