Mixin用于类似的Rails模型

时间:2018-01-14 19:03:14

标签: ruby-on-rails model mixins

我不是一个Rails新手,但我当然还有很长的路要走。我理解模块在一般意义上是如何工作的,但我从未完全理解如何使用自己创建的模块来发挥我的优势。这是一个非常简单的例子,我非常确定mixin模块是合适且有用的。

My Rails应用程序模型协会足球(足球)比赛。匹配由Match模型表示。我还有几个模型来表示匹配期间可能发生的事件(例如GoalPenaltyKickCaution)。 Match模型和这些事件的模型之间存在has_many / belongs_to关系。

这些模型中的每一个都有三个共同的时间属性:periodminuteorder_within_minute。通过这些列中的信息,我可以编写一个非常简单的<=>方法,使这些事件在发生时具有可比性。至关重要的是,我能够在此基础上比较事件,以便我可以在匹配中返回事件的排序列表。

据我所知,这些模型中的每一个都需要包含相同的代码才能实现我想要的目标:

include Comparable

def <=>
  ## Comparison code goes here ##
end

在我看来,这可以通过mixin来完成,将相同的代码应用于这些模型中的每一个,但我不太确定如何去做。

我意识到这可能是一个非常基本的问题,但是这样做的正确方法是什么?我是否将上述代码块放在一个模块中,并在每个模型中include该模块,或者我需要做一些不同的事情吗?我在哪里将此代码放在我的文件系统中?

1 个答案:

答案 0 :(得分:0)

  

我是否将上面的代码块放在模块中并在每个模型中包含该模块,或者我是否需要做一些不同的事情?

这正是你所做的。

  

我在哪里将此代码放在我的文件系统中?

comparable.rb中的app/models/concerns下的生活应该很好,即使它没有使用ActiveSupport::Concern提供的句法糖。