【问题标题】:Refactoring validation methods and callbacks重构验证方法和回调
【发布时间】:2011-07-01 11:55:01
【问题描述】:

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

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

我必须做什么才能做到这一点?我必须在我的类中添加什么代码以及在重构类\模型中添加什么?

【问题讨论】:

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


    【解决方案1】:

    好吧,您可以创建一个超类,您的三个模型都从中继承。我倾向于将抽象基类与模型本身放在一起放在 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
    

    如果你的事物有很多不同之处,以至于像这样对它们进行分组没有意义,你会想要使用一个模块来代替,这只是稍微复杂一点。

    【讨论】:

    • Davis - 你能给我举个使用模块的例子吗?
    • 您在尝试与模块类似的事情时遇到了什么麻烦?
    【解决方案2】:

    【讨论】:

    • Paul Groves - 这是出于验证目的……而回调呢?此外,我想将所有“重构代码”保留在分离的类\模型中。
    • 道歉......承诺,如果没有正确阅读问题,就不会再有 cmets 了数据库。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-01
    相关资源
    最近更新 更多