2014-12-03 110 views
0

我使用下面的命令Ruby Gem如何與rails中的特定模型字段的活動模型進行通信?

bundle gem my_gem 

,可以執行一些動作/事件,當一個對象訪問,特定的模場創建一個名爲my_gem寶石。

,我想在my_gem 功能是從act_as_voteable gemhttps://github.com/mbleigh/acts-as-taggable-on

class User < ActiveRecord::Base 
    acts_as_taggable # Alias for acts_as_taggable_on :tags 
    acts_as_taggable_on :skills, :interests 
end 

refered如何添加的功能,這樣我可以執行相同。

讓我的模型是「用戶」,它有一個字段「選項」

每當編碼器寫行

User.option

Rails應用程序應該是指my_gem到執行一些操作。

我以爲會有這樣的編碼器可以在其model.rb文件執行,使模型信號指my_gem

class User < ActiveRecord::Base 
    my_gem :option 
end 

例如就像我們一樣

validates :title 
+0

你的問題到底是什麼?你試過什麼了? – 2014-12-03 07:44:48

+0

對於我編輯模式細化問題的問題感到抱歉。 – 2014-12-03 08:04:25

+0

@SohairAhmad問題仍然沒有 – 2014-12-03 08:16:02

回答

1

這個線索只是擴展你的模塊的用戶類。你可以直接做或者通過一些紅寶石猴子修補。退房 taggable.rb#39 和創業板ebtry文件 acts_as_taggable_on#87

module MyGem::Extension 

    def my_gem(option) 
    #save the config in a class var 
    @option = option 
    end 

    def option 
    #check @option class var 
    #do work depedning on @option 
    end 
end 


#the straight way 
class User 
    extend MyGem::Extension 
    my_gem :option 
end 


#the ruby magic way, extending all ActiveRecords 
ActiveSupport.on_load(:active_record) do 
    extend MyGem::Extension 
end 

class User 
my_gem :option 
end 

更新: 有一個更詳細的軌道使用的ActiveSupport ::值得關注的是一個語法糖來擴展類指導The Basics of Creating Rails Plugins這是做同樣的事情和實例方法一次。

+0

如果我嘗試訪問User.option,那麼首先它會去my_gem?是不是? – 2014-12-03 09:50:22

+1

如果通過您的gem模塊擴展用戶,它只是將所有模塊函數作爲類方法導入User類。因此,您的寶石中的'def option'變成普通的用戶類方法 請參閱https://github.com/mbleigh/acts-as-taggable-on/blob/v3.4.1/lib/acts-as-taggable-on .rb#L87 – 2014-12-03 09:53:20

+0

這是一個很好的概念謝謝你。我的確切觀點是,讓我想要做這個'User.option.key = value',那麼這行應該去my_gem的功能,分割'key = value'來自用戶。option',我應該爲'模塊MyGem做什麼配置::擴展 高清my_gem(選項) #save一類變種 @option =選項 結束 畫質選項 #chech @option類變種 的配置#do @option上工作 結束 結束# – 2014-12-03 10:03:50

相關問題