Ruby   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ruby-on-rails – 使用基类与基本模块重构ActiveRecord模型大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
A级和B级相同:
class A < ActiveRecord::Base
 def foo
  puts "foo"
 end
end

class B < ActiveRecord::Base
 def foo
  puts "foo"
 end
end

与基类重构这样做有什么区别?

class Base < ActiveRecord::Base
 def foo
  puts "foo"
 end
end

class A < Base
end

class B < Base
end

相对于使用基本模块:

@H_71_2@module Base def foo puts "foo" end end class A < ActiveRecord::Base include Base end class B < ActiveRecord::Base include Base end

一种方式比另一种更好吗?

解决方法

在所有其他答案都丢失的两种方法之间存在根本区别,也就是STIs(单表继承)的实现:

http://api.rubyonrails.org/classes/ActiveRecord/Base.html(查找“单表继承”部分)

基本上,如果你像这样重构Base类:

class Base < ActiveRecord::Base
  def foo
    puts "foo"
  end
end

class A < Base
end

class B < Base
end

那么你应该有一个名为“bases”的数据库表,其中一个名为“type”的列应该有一个值“A”或“B”.这个表格上的列在所有的模型中都是一样的,如果你的列只属于其中一个模型,那么你的“基础”表将被非规范化.

而如果您像这样重构Base类:

@H_71_2@module Base def foo puts "foo" end end class A < ActiveRecord::Base include Base end class B < ActiveRecord::Base include Base end

那么就不会有“基地”.相反,会有一个表“as”和一个表“bs”.如果它们具有相同的属性,列将必须在两个表中重复,但是如果存在差异,则它们不会被denomarlized.

所以,如果一个比另一个更好,是的,但这是特定于你的应用程序.根据经验,如果它们具有完全相同的属性或大的重叠,则使用STI(第一个例子),否则使用模块(第二个例子).

大佬总结

以上是大佬教程为你收集整理的ruby-on-rails – 使用基类与基本模块重构ActiveRecord模型全部内容,希望文章能够帮你解决ruby-on-rails – 使用基类与基本模块重构ActiveRecord模型所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。