gpt4 book ai didi

ruby-on-rails - rails : how to extend a gem's ActiveRecord child class?

转载 作者:数据小太阳 更新时间:2023-10-29 06:53:43 24 4
gpt4 key购买 nike

我在扩展一个在 gem 中定义并且是 ActiveRecord::Base 的子类的类时遇到问题。

我唯一想扩展这个类的是:有很多 :promos

然而,扩展倾向于排除原始类。我得到的错误:

PGError: ERROR:  relation "sites" does not exist
LINE 4: WHERE a.attrelid = '"sites"'::regclass
^
: SELECT a.attname, format_type(a.atttypid, a.atttypmod), d.adsrc, a.attnotnull
FROM pg_attribute a LEFT JOIN pg_attrdef d
ON a.attrelid = d.adrelid AND a.attnum = d.adnum
WHERE a.attrelid = '"sites"'::regclass
AND a.attnum > 0 AND NOT a.attisdropped
ORDER BY a.attnum

检查控制台中的类给出:

Cms::Site(Table doesn't exist)

原始类有这个方法可能不再被调用:

set_table_name :cms_sites

顺便说一句。我正在尝试从 comfortable_mexican_sofa 插件扩展 Site 类。

这是应该扩展类的文件:

# lib/comfortable_media_sofa/comfortable_media_sofa.rb
require 'comfortable_mexican_sofa'

module Cms
class Site < ActiveRecord::Base
has_many :promos
end
end

在此处加载:

require File.expand_path('../boot', __FILE__)

require 'rails/all'

Bundler.require(:default, Rails.env) if defined?(Bundler)

module Mkturbo
class Application < Rails::Application
config.autoload_paths += %W(#{config.root}/vendor/gems/comfortable_mexican_sofa-0.0.18)
config.autoload_paths += %W(#{config.root}/lib/comfortable_media_sofa)
config.plugins = [ :comfortable_mexican_sofa, :comfortable_media_sofa, :all ]

# ....
end
end

并且在 comfortable_mexican_sofa 初始化程序的顶部是必需的:

# config/initializers/comfortable_mexican_sofa.rb
require 'comfortable_media_sofa'

我该怎么做?是需求订单问题还是我以错误的方式扩展它?非常感谢!

最佳答案

在您的示例中,您完全覆盖了该类。你只需要将东西注入(inject)其中......就像这样:

module MyModule
def self.included(base)
base.has_many :things
end
end
Cms::Site.send(:include, MyModule)

然后看看关联是否开始:

ruby-1.9.2-p180 :005 > s = Cms::Site.new
=> #<Cms::Site id: nil, label: nil, hostname: nil>
ruby-1.9.2-p180 :006 > s.things
NameError: uninitialized constant Cms::Site::Thing

我实际上将该模块直接放入沙发的初始化程序中。希望这会有所帮助。

关于ruby-on-rails - rails : how to extend a gem's ActiveRecord child class?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6819876/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com