2012-02-07 7 views
3

既存のRailsアプリケーションのモデルに関連付けることができるActiveRecordモデルを含む宝石をパッケージ化したいと思います。私はacts_as_taggable_onのコードに従おうとしてきましたが、私は関連付けが機能するようにいくつかの問題に取り掛かりました。関連するRailsモデルを持つ宝石の作成

私の宝石はキッチンと呼ばれています。この宝石で定義されている私のモデルはDishであり、私は、多面的な関連付け(Cookとして)を、Userなどのメインアプリケーションのモデルに追加したいと考えています。

lib/kitchen.rb lib/kitchen/dish.rb lib/kitchen/cook.rb

module Kitchen 
    class Dish < ::ActiveRecord::Base 
    belongs_to :cook, :polymorphic => true 
    end 
end 

require "active_record" 
require "kitchen/dish.rb" 
require "kitchen/cook.rb" 

(あまり理解せずにhttp://guides.rubyonrails.org/plugins.html#add-an-acts_as-method-to-active-recordからコードを持ち上げる)

module Kitchen 
    module Cook 
    extend ActiveSupport::Concern 

    included do 
    end 

    module ClassMethods 
     def acts_as_cook 
     class_eval do 
      has_many :dishes, :as => :cook 
     end 
     end 
    end 
    end 
end 

ActiveRecord::Base.send :include, Kitchen::Cook 

最後に、私は私のダミーのすべてを移行しましたa

NameError: 
    uninitialized constant User::Dish 

任意のアイデア何が欠けている:PP、と私はエラー私はユーザーインスタンスのuser.dishesにアクセスしようとする任意の時間を取得していますspec/dummy/app/models/user.rb

class User < ActiveRecord::Base 
    acts_as_cook 
end 

で関連を含めますか?

答えて

3

多分これを試してみてください:

has_many :dishes, :as => :cook, :class_name => 'Kitchen::Dish' 
+0

恐ろしい、エラーを修正しています。今度は 'user.dishes'で何かしようとするとエラーが出る NoMethodError:未定義のメソッドX for Kitchen :: Cook:Module –

+0

私はちょっとおもちゃのドメインから戻ってきて混乱してしまいました。あなたの答えは完全に機能します。 –

関連する問題