2009-12-09 65 views
1

我寫了一個簡單的博客插件(它實際上是一個rails引擎)。它旨在被安裝到已經設置了用戶模型的應用程序中。使用自定義rake任務將代碼添加到模型中

爲了節省我不得不打開我的用戶模型並手動插入「has_many:posts」,我想寫一個rake任務,自動爲我做這件事。

如果我要包我的引擎作爲發電機寶石裏面,那麼下面可能會工作:

def manifest 
    record do |m|  
    m.insert_into "app/models/user.rb", 'has_many :posts' 
    end 
end 

可這種事情可以從rake任務做了什麼?我環顧四周,我找不到答案......提前致謝

回答

1

你能在您的插件模型文件,將打通用戶類,並添加「的has_many:帖子」?

class User < ActiveRecord::Base 
    has_many :posts 
end 

我認爲這樣做是可行的,因爲您可以隨時從任何文件打開Ruby類;所以無論使用插件的項目在其模型文件夾中是否有user.rb文件,您的文件也將被加載,並且has_many將在運行時添加到User類中。

希望它有幫助。

+0

嗨胡安,謝謝你的建議。有效!再次感謝。 – stephenmurdoch 2009-12-09 20:30:50

1

您可以通過rake任務確定訪問您的模型。你必須確保將你的環境傳遞給它,以便它知道你的模型。例如,

desc"This will insert the Posts" 

task(:insertPosts => :environment) do 

#your code here 

end 
+0

嗨Sosborn,謝謝你的建議。解決這個問題的方法是在插件中包含一個user.rb文件(按照Juan的建議),以便在插件安裝之前已經存在於應用程序中的usre.rb文件具有額外的功能。 – stephenmurdoch 2009-12-09 20:32:05

0

這是一個實際修改源代碼的任務嗎?你有沒有考慮過包含一個模塊?請詳細說明您正在嘗試實現的正確指導。

+0

嗨,史蒂夫。我將研究這個使用模塊的想法。目前由Juan提供的解決方案可以發揮作用。 – stephenmurdoch 2009-12-09 20:33:43

相關問題