2015-05-29 51 views
0

我在Rails 4应用程序中使用两个宝石:acts_as_tenantsimple_hashtags猴子修补和回调错误

如果某个承租人存在哈希标签,则不会为其他承租人重新保存哈希标签。所以我想覆盖find_or_create_by_name和find_by_name方法。
对于这一点,我还需要覆盖parsed_hashtags method,而是使之使用我的应用程序,我也需要有回调

before_save :update_hashtags 

我有一个initializer,我第一次用的多租户系统采取行动井号标签(所以tenant_id自动保存)。我添加了这些方法,但是当试图覆盖回调时,我碰到了一堵墙。

如果我使用扩展ActiveSupport ::关注像在要点,我得到这个错误,无法启动我的应用程序。

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 

我是处于亏损状态,这些是仅有的两个解决方案,我可以找到,我似乎不能让他们的作品。 有没有其他的方式来使用模块中的回调?或者,也许另一种方式来解决名称和租户的问题?

回答

1

为了获得simple_hashtag是租户感知,只是覆盖包括hashtag模型的验证,比如像这样:

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