0

REST API railscast には、次のコード例があります。

module Api
  module V1
    class ProductsController < ApplicationController
      class Product < ::Product
        def as_json(options={})
          super.merge(released_on: released_at.to_date)
        end
      end
    end
  end
end

私は何をフォローするのに問題があります:

  class Product < ::Product

...ですか?irb で似たようなものを再作成しようとすると、次のようになります。

module Fooirb(main):001:0> module Foobar
irb(main):002:1> class Product < ::Product
irb(main):003:2> end
irb(main):004:1> end
NameError: uninitialized constant Product
    from (irb):2:in `<module:Foobar>'
    from (irb):1

スクリーンキャスト

4

5 に答える 5

2

::Product は、Product クラスの最上位の名前空間を探しています。この場合、既存のモデルにアクセスしています。レールキャストから:

ここで行うことは、既存の Product モデル クラスから継承する ProductsController 内に新しい Product クラスを作成し、そこで変更を加えることです。

于 2012-06-06T16:12:44.097 に答える
0

< は継承を意味します

:: は名前空間を意味しますが、:: で始まる場合は名前空間なしを意味します

class Product < ::Product は、現在のネームスペースの外にある別のクラス Product からクラス Product を継承することを意味します

于 2012-06-06T16:19:02.650 に答える
0

エラーについては、使用しないirbrails consoleください (IRB は Rails アプリをロードしません。http://guides.rubyonrails.org/command_line.html#rails-consoleを参照してください) 。

于 2012-06-06T16:23:18.943 に答える