2017-03-23 2 views
0

私は、プロジェクト内でCustomerのフルCRUDシステムを実装しました。私はこのレール内のモジュールとモデル名との混同

app/controllers/admin/customer/features_controller.rb 

コードのようなファイルパスにfeature_controller.rb(名前が変更された)新しいコントローラを作成したのでcustomers_controller.rbのパスは、その上に

app/controllers/admin/customers_controller.rb 

ですが、私は新しい機能を追加する必要がありますコントローラ内部で

module Admin 
    module Customer 
    class FeatureController < ApplicationController 
     def index; end 
    end 
    end 
end 

は、だから、私は通常、クストを作成するときなど、いくつかの方法が影響を受けた私の古い機能を持っていますマーそれがこのエラーを報告している:

NoMethodError (undefined method `new' for Admin::Customer:Module): 
    app/controllers/admin/customers_controller.rb:21:in `create' 

と行番号21は、次のとおりです。

@customer = Customer.new customer_params 
if @customer.save 
.... 

私は、新しいコントローラやフォルダだけでなくが、それでも同じエラーを取り除きます。

クラスの種類をbinding.pryに見て、Moduleと言っています。

UPDATE development.rb

# since you don't have to restart the web server when you make code changes. 
    config.cache_classes = false 

    # Do not eager load code on boot. 
    config.eager_load = false 

application.rb

config.autoload_paths += %W(#{config.root}/lib) 
    config.autoload_paths += Dir["#{config.root}/lib/**/*"].select{|f| File.directory? f} 
+0

誰もそれについて考えていますか? –

+0

古いコードを見るのに問題があるので、devキャッシュをオフにしてみてください。この質問は最近の月であるため、Rails 5とPumaを使用している可能性があります。 'rails server --help'です。次のコマンドを試してください: 'rails server --no-dev-caching'。 – Chloe

答えて

2

使用定数解決演算子(::)。この方法は、あなたが現在のスコープ外のCustomer定数を探すためにレールを伝えるため

@customer = ::Customer.new customer_params 

は、あなたのためにそれを解決します。

+2

何が問題なのか、そしてその解決策がどのように役立つのかを教えていただけますか? –

+0

それから、私は古いコードのどこにでも変更を加える必要があります。私はすでにプロジェクトから新しいコントローラを削除しましたが、まだそれと矛盾しています。なぜなのかご存知ですか ? –

+0

@Ahmadhamza私はそれが定数のオートローディングと何かを持っていると思う。サーバーとスプリングを再起動してください。 –

関連する問題