gpt4 book ai didi

ruby-on-rails - Rails,类中未定义的方法但存在方法

转载 作者:数据小太阳 更新时间:2023-10-29 08:44:28 26 4
gpt4 key购买 nike

我正在尝试解决一个奇怪的问题。我正在使用模块扩展 ActiveRecord。

module StringyAssociationIds

def stringy_ids(association)
define_method("stringy_#{association}_ids=") do |comma_seperated_ids|
self.send("#{association}_ids=", comma_seperated_ids.to_s.split(","))
end

define_method("stringy_#{association}_ids") do
send("#{association}_ids").join(",")
end
end

end

ActiveRecord::Base.extend(StringyAssociationIds)

我有一个类“门”,我有一个关联。

class Gate < ActiveRecord::Base
include Productable
stringy_ids :product
end

关联是用连接表定义的:

module Productable
extend ActiveSupport::Concern

included do
has_many :productable_products, as: :productable
has_many :products, through: :productable_products
end

end

当我尝试创建一个新门时出现错误:

undefined method `stringy_ids' for #<Class:0x007f91e12bb7e8>

我的错在哪里?

编辑:我也尝试在 lib 目录中添加一个扩展(由 application.rb 自动加载)

module ActiveRecordExtension

extend ActiveSupport::Concern

def stringy_ids(association)
define_method("stringy_#{association}_ids=") do |comma_seperated_ids|
self.send("#{association}_ids=", comma_seperated_ids.to_s.split(","))
end

define_method("stringy_#{association}_ids") do
send("#{association}_ids").join(",")
end
end

end

# include the extension
ActiveRecord::Base.send(:include, ActiveRecordExtension)

我也在控制台中尝试:

ActiveRecordExtension.instance_methods
=> [:stringy_ids]

所以我的扩展程序已加载...

最佳答案

您的类方法 stringy_ids 是在 ActiveRecord::Base 上定义的,而不是 Gate。与实例方法不同,类方法不被继承,因为 Gate 单例类不是 ActiveRecord::Base 单例类的子类。

关于ruby-on-rails - Rails,类中未定义的方法但存在方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34472791/

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