重构验证方法和回调

时间:2011-07-01 11:55:01

标签: ruby-on-rails ruby ruby-on-rails-3 class refactoring

我正在使用Ruby on Rails 3.0.7并且我有树类的行为几乎相同(以及它们模型文件中的代码)。所有这些都具有namedescription属性,运行相同的验证方法,并且两者都有一个before_save回调,它维护数据一致,提供相同的功能。

我想在一个单独的类\ model 中重构验证方法和回调(我想我必须在我的应用程序的\lib文件夹中找到它们相关的文件。)

我需要做些什么才能做到这一点?我必须在我的类中添加哪些代码以及重构类\ model中的内容?

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

好吧,你可以创建一个超级类,你的三个模型继承了它。我倾向于将抽象基类与模型本身一起放在app / models中。

# app/models/thing.rb
class Thing < ActiveRecord::Base
    # common code goes here, such as
    before_save ...
    validates_length_of :foo
end

# app/models/red_thing.rb
class RedThing < Thing
    # methods specific to RedThing go here
end

# app/models/blue_thing.rb
class BlueThing < Thing
    # methods specific to BlueThing go here
end

如果你的东西有许多不同之处,以至于将它们分组是没有意义的,那么你会想要使用一个模块,这只是一个复杂的。