我不是一个铁路新手,但我肯定离成为一个专家还有很长的路要走。我从一般意义上理解模块是如何工作的,但我从来没有完全理解如何利用我自己创建的模块来发挥我的优势。这是一个非常简单的例子,在这个例子中,我非常肯定一个混合模块将是合适的和有用的。
我的Rails应用程序模型关联足球(足球)比赛。匹配由Match模型表示。我还有几个模型来表示匹配过程中可能发生的事件(例如,Goal、PenaltyKick、Caution)。Match模型和这些事件的模型具有has_many/belongs_to关系。
这些模型中的每一个都有三个共同的时态属性:period、minute和order_within_minute。有了这些列中的信息,我可以编写一个非常简单的<=>方法,根据这些事件发生的时间使这些事件具有可比性。至关重要的是,我能够在此基础上对事件进行比较,以便在匹配中返回一个已排序的事件列表。
我理解这些模型中的每一个都需要包含相同的代码才能实现我想要的目标:
include Comparable
def <=>
## Comparison code goes here ##
end在我看来,这可以通过一个混合器来实现,将相同的代码应用到每个模型中,但我不太确定如何做到这一点。
我意识到这可能是一个非常基本的问题,但是怎样才是正确的方法呢?我是把上面的代码块放在一个模块中,并在每个模型中加入include模块,还是需要做一些不同的事情?我应该把这些代码放在我的文件系统中吗?
发布于 2018-01-14 19:48:16
我是将上面的代码块放在一个模块中,并将该模块包含在每个模型中,还是需要做一些不同的事情?
你就是这么做的。
我应该把这些代码放在我的文件系统中吗?
在comparable.rb in app/models/concerns下生活应该很好,尽管它没有使用ActiveSupport::Concern提供的语法糖。
https://stackoverflow.com/questions/48253116
复制相似问题