既存の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
で関連を含めますか?
恐ろしい、エラーを修正しています。今度は 'user.dishes'で何かしようとするとエラーが出る NoMethodError:未定義のメソッドX for Kitchen :: Cook:Module –
私はちょっとおもちゃのドメインから戻ってきて混乱してしまいました。あなたの答えは完全に機能します。 –