用关联的Rails模型创建一个gem

我想打包一个包含ActiveRecord模型的gem,这些模型可以与现有的Rails应用程序中的模型相关联。 我一直在试图遵循acts_as_taggable_on的代码,但我遇到了一些让协会工作的问题。

我的宝石叫做厨房。 我在gem中定义的模型是Dish,并且我希望将一个多态关联(如Cook)添加到主应用程序(例如User)中的模型中。

lib/kitchen.rb

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

lib/kitchen/dish.rb

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

lib/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

最后,我已经将所有内容都移植到了我的虚拟应用中,并将其包含在spec/dummy/app/models/user.rb

class User < ActiveRecord::Base
  acts_as_cook
end

user.dishes尝试访问user.dishes用户实例时user.dishes收到错误user.dishes

 NameError:
   uninitialized constant User::Dish

任何想法缺少什么?


尝试这可能:

has_many :dishes, :as => :cook, :class_name => 'Kitchen::Dish'
链接地址: http://www.djcxy.com/p/14247.html

上一篇: Creating a gem with associated Rails models

下一篇: Converting Rails 2 plugin to Rails 3 gem