2015-10-12 9 views
5

私はモデルOrganizationを持っています。私がAdmin::Organization::ActivitiesControllerという名前のコントローラを持ってapp/models/organization.rbRails NameError初期化されていない定数(モデルと名前空間の衝突)

class Organization < ActiveRecord::Base 
... code 
end 

で定義されています。 app/controllers/admin/organization/activities_controller.rbで定義されています。その中にインデックスアクションがあります。何らかの理由で、それはコントローラクラスの内部組織モデルをスコープだため

NameError in Admin::Organization::ActivitiesController#index 
uninitialized constant Admin::Organization::ActivitiesController::Organization 

:私は上記のindexアクションを実行するとき

class Admin::Organization::ActivitiesController < ApplicationController 
    def index 
    @organization = Organization.new 
    ... more code 
    end 
end 

は、私は、次のメッセージが表示されます。 indexメソッドを変更して使用する場合は、

@organization = ::Organization.new 

となります。

この現象は、コンソールに表示されないようです。インデックスメソッドでbinding.pryコールを追加すると、コマンドラインからOrganization.newまたは::Organization.newを呼び出すことができます。

アプリ内の他のすべてのモデルは正常に動作し、この奇妙な動作はありません。私は元々コードを書いていないので、何が起こっているのか把握しようとしています。

routes.rbファイルの名前空間と何か関係があると思います。 organizationという単語を使用する名前空間があります。試験として

namespace :admin do 
    namespace :organization 
    resources :activities 
    end 
end 

、私は:organizationsに名前空間を変更し、私は物事が::を必要とせずに仕事を得ることができました。物やルート設定を構成する方法があるのでというモデルに干渉しない:organizationという名前空間を持つことができますか?

+0

が生成されます、

# config/routes.rb scope 'admin/organization', path: 'admin/organization' do resources :activities end 

をルートを設定あなたがいることがわかり意味ですかアプリケーションを起動しようとしたとき、または 'ActivitiesController#index'メソッドを呼び出すときにエラーが発生しましたか? – seddy

+0

'ActivitiesController#index'アクションが実行されると、ブレークします。私は質問を更新しました。 – CodeSmith

答えて

1

正しいパスを作成したい場合は、アクティビティコントローラをadmin/organization名前空間フォルダの下に置く必要はありません。もう一つの選択肢は、名前空間の代わりにスコープを使うことです。

# app/controllers/activities_controller.rb 
class ActivitiesController < ApplicationController 
    def index 
    @organization = Organization.new 
    ... more code 
    end 
end 

さて、これはあなたが「コードブレーク」と言うときだけ、明確にするために、このようなルート、

Prefix Verb URI Pattern          Controller#Action 

activities GET /admin/organization/activities(.:format)  activities#index 
       POST /admin/organization/activities(.:format)  activities#create 
...... 
関連する問題