繁体   English   中英

猴子补丁和回调错误

[英]Monkey patching and callback error

我在Rails 4应用程序中使用了两个gems: acts_as_tenantsimple_hashtags

如果一个租户上存在#标签,则不会为另一个租户重新保存它。 所以我想重写find_or_create_by_name和find_by_name方法。
为此,我还需要覆盖parsed_hashtags方法 ,但要使其被我的应用使用,还需要包含回调

before_save :update_hashtags

我有一个初始化程序 ,我最初使用它来将多租户系统用作标签(因此,tenant_id将自动保存)。 我添加了方法,但是当尝试覆盖回调时,我遇到了麻烦。

如果像主旨中那样使用扩展ActiveSupport :: Concern,则会收到此错误,并且无法启动我的应用程序。

lib/active_support/concern.rb:126:in `included': Cannot define multiple 'included' blocks for a Concern (ActiveSupport::Concern::MultipleIncludedBlocks)
        from /Users/schatteleyn/subarashi/config/initializers/hashtags.rb:16:in `<module:Hashtaggable>'
        from /Users/schatteleyn/subarashi/config/initializers/hashtags.rb:14:in `<module:SimpleHashtag>'
        from /Users/schatteleyn/subarashi/config/initializers/hashtags.rb:1:in `<top (required)>'

如果我使用该版本

def self.included(base)
  base.class_eval do
    before_save :do_something
  end
end

我收到此错误,可以启动我的应用程序,但是在任何页面上都收到错误。

undefined method `before_save' for HashtagConcern:Module

我很茫然,这是我能找到的仅有的两个解决方案,而且我似乎无法使它们起作用。 还有其他方法可以在模块中使用回调吗? 或者,也许是另一种解决按姓名和房客查找问题的方法?

为了使simple_hashtag能够识别租户,只需覆盖Hashtag模型的验证即可,例如:

SimpleHashtag::Hashtag.clear_validators!
module SimpleHashtag
  class Hashtag < ActiveRecord::Base
    acts_as_tenant :tenant
    validates :name, :uniqueness => { :scope => :tenant }
  end
end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM