【问题标题】:ActiveSupport::Concern `to_liquid` overriden by `liquid_methods`ActiveSupport::Concern `to_liquid` 被`liquid_methods` 覆盖
【发布时间】:2014-07-04 14:04:23
【问题描述】:

我有一个模特Widget

include SomeConcern

SomeConcern extends Activesupport::Concern 没关系。我可以调用SomeConcern 中定义的方法,比如 to_liquid,一切都很好。

一旦我在Widget 类中调用liquid_methods :foobar,我关心的to_liquid 方法就会被液体的默认方法覆盖。

如何让我的关注版本优先?

【问题讨论】:

    标签: ruby-on-rails inheritance liquid operator-precedence activesupport-concern


    【解决方案1】:

    当您在模型中调用 liquid_methods 时,liquid 使用 define_method :to_liquid

    你想让你的 mixin 优先,你必须在调用之后包含它。

    您可以做的另一件事是拥有一个常规模块(始终优于ActiveSupport::Concern)并使用prepend 将其放在祖先链的前面。

    【讨论】:

    • 我确实尝试过颠倒包含顺序,但无济于事。
    • 是的,颠倒顺序不起作用。这是因为 ruby​​s 类查找的工作方式。你试过prepend吗?否则你可以使用alias_method_chain
    • 我最终以不同的方式解决了这个问题。感谢您的输入。
    猜你喜欢
    • 1970-01-01
    • 2012-09-14
    • 2015-12-29
    • 1970-01-01
    • 2013-02-01
    • 2013-05-26
    • 1970-01-01
    • 1970-01-01
    • 2011-06-26
    相关资源
    最近更新 更多