我一直在研究我的问题的最佳方法,我最初将其作为单个表继承实现,但我对可伸缩性深表关注,因为表中可能有数千列。
所以问题是我希望产品的方法完全相同,唯一的区别是每个产品所包含的属性。似乎在这种情况下,多类继承(在rails中本身不支持?)将是最好的方法或某种多态关联。
我想为以下
工作#product.rb
Class Product < ActiveRecord::Base
attr_accessible :title .....
def to_s # some arbitrary method used by all extending classes
....
end
end
#book.rb
class Book < Product
attr_accessible :author...
end
所以我希望本书从产品继承方法,而不是产品知道每个子类所需的属性。如果可能的话,通过一个查询获得所有产品。
我需要知道接近这个的最佳方法,如果我做错了,请注意上面写的代码只是为了简化我的问题。
答案 0 :(得分:1)
您可以做的是创建一个模块并将其包含在几个不同的模型中。
首先,在lib目录中创建一个文件
即。)my_module.rb
module MyModule
def full_name
"#{first_name} #{last_name}"
end
end
然后,确保在Rails应用程序启动时加载模块:
在config / application.rb中:
config.autoload_paths += %W(#{config.root}/lib)
最后,将其包含在您的模型中:
即。)app / models / thing.rb
class Thing < ActiveRecord::Base
attr_accessible :first_name, :last_name
include AdditionMod
end
您可以在控制台中测试它:
@thing = Thing.create(first_name: "Awesome", last_name: "Module")
@thing.full_name
=> "Awesome Module"
答案 1 :(得分:0)
发现我可以将H-store与postgres一起使用,这使得我可以拥有一个包含可以与postgres的强大功能一起使用的模式更少哈希的列(例如,查看{{3} })