ruby-on-rails - 使用关联的 Rails 模型创建 gem

标签 ruby-on-rails activerecord gem associations

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

我的 gem 叫做 Kitchen。我在 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 实例的 user.dishes 时,我都会遇到错误:

 NameError:
   uninitialized constant User::Dish

知道缺少什么吗?

最佳答案

也许试试这个:

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

关于ruby-on-rails - 使用关联的 Rails 模型创建 gem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9182299/

相关文章:

database-design - 单表继承是解决我的 Rails 问题的正确解决方案吗?

ruby - 更改 ActiveRecord 中对象的类

ruby-on-rails - 无法在 sidekiq 中添加新队列

ruby-on-rails - Rails 5 + Webpacker + react 。在系统测试中找不到application.js

ruby-on-rails - Heroku、Postgresql、composite_primary_keys

ruby-on-rails - Rails 7 + Devise + Turbo 流在登录时不显示错误

ruby-on-rails - 更快地找到最后更新的时间戳

ruby-on-rails - AWS Elastic Beanstalk Rails Bundler 失败

ruby - 在 ubuntu 14.0.4 (Ruby 1.8.7) 中安装 nokogiri 时出错

ruby-on-rails - 我可以从安装了它的真实应用程序中运行Rails引擎规范吗?