类似 Rails 模型的混合
Mixin for similar Rails models
我不是一个 Rails 新手,但我离成为专家还有很长的路要走。我理解模块在一般意义上是如何工作的,但我从来没有完全理解如何使用我自己创建的模块来发挥我的优势。这是一个非常简单的示例,我非常确定 mixin 模块是合适且有用的。
我的Rails应用模型协会足球(英式足球)比赛。匹配项由 Match
模型表示。我还有几个模型来表示比赛期间可能发生的事件(例如 Goal
、PenaltyKick
、Caution
)。 Match
模型和这些事件的模型具有 has_many
/belongs_to
关系。
这些模型中的每一个都具有三个共同的时间属性:period
、minute
和 order_within_minute
。有了这些专栏中的信息,我可以编写一个非常简单的 <=>
方法来使这些事件根据它们发生的时间进行比较。至关重要的是,我能够在此基础上比较事件,这样我就可以 return 比赛中事件的排序列表。
我知道这些模型中的每一个都需要包含相同的代码才能实现我想要的:
include Comparable
def <=>
## Comparison code goes here ##
end
在我看来,这可以通过 mixin 将相同的代码应用于这些模型中的每一个来实现,但我不太确定如何去做。
我知道这可能是一个非常基本的问题,但是正确的方法是什么?我是将上面的代码块放在一个模块中,然后 include
该模块放在每个模型中,还是我需要做一些不同的事情?我应该将这段代码放在我的文件系统中的什么位置?
Do I put the above block of code within a module and include that module in each of these models, or do I need to do something different?
这正是你所做的。
Where do I put this code within my file system?
在 app/models/concerns
中生活在 comparable.rb
下应该没问题,即使它没有使用 ActiveSupport::Concern
提供的语法糖。
我不是一个 Rails 新手,但我离成为专家还有很长的路要走。我理解模块在一般意义上是如何工作的,但我从来没有完全理解如何使用我自己创建的模块来发挥我的优势。这是一个非常简单的示例,我非常确定 mixin 模块是合适且有用的。
我的Rails应用模型协会足球(英式足球)比赛。匹配项由 Match
模型表示。我还有几个模型来表示比赛期间可能发生的事件(例如 Goal
、PenaltyKick
、Caution
)。 Match
模型和这些事件的模型具有 has_many
/belongs_to
关系。
这些模型中的每一个都具有三个共同的时间属性:period
、minute
和 order_within_minute
。有了这些专栏中的信息,我可以编写一个非常简单的 <=>
方法来使这些事件根据它们发生的时间进行比较。至关重要的是,我能够在此基础上比较事件,这样我就可以 return 比赛中事件的排序列表。
我知道这些模型中的每一个都需要包含相同的代码才能实现我想要的:
include Comparable
def <=>
## Comparison code goes here ##
end
在我看来,这可以通过 mixin 将相同的代码应用于这些模型中的每一个来实现,但我不太确定如何去做。
我知道这可能是一个非常基本的问题,但是正确的方法是什么?我是将上面的代码块放在一个模块中,然后 include
该模块放在每个模型中,还是我需要做一些不同的事情?我应该将这段代码放在我的文件系统中的什么位置?
Do I put the above block of code within a module and include that module in each of these models, or do I need to do something different?
这正是你所做的。
Where do I put this code within my file system?
在 app/models/concerns
中生活在 comparable.rb
下应该没问题,即使它没有使用 ActiveSupport::Concern
提供的语法糖。