2013-02-15 97 views
0

我正在爲Rails項目分割爲多個引擎進行Rake任務。該任務位於主要的 Rails應用程序的lib/tasks文件夾中,並且試圖從Blog引擎(engines/blog/app/models/post)創建新的PostRake任務中的Rails引擎模型

引擎文件(blog/lib/blog/engine.rb)看起來像:

module Blog 
    class Engine < ::Rails::Engine 
    isolate_namespace Blog 
    end 
end 

所以,如果我理解正確,引用Blog::ModelHere是正確的語法。這裏的耙子任務:

namespace :blog do 
    desc "Import blog posts from old Wordpress site" 
    task :import => :environment do 
    # ... generating variables here 
    post = Blog::Post.create!(
     post.title = title, 
     post.slug = title.parameterize, 
     post.date = date, 
     post.user_id = User.find_by_name(user).id, 
     post.content = content, 
     post.tags = tags 
    ) 
    end 
end 

返回...
undefined method 'title=' for nil:NilClass

這似乎窒息了Blog::Post電話。我也試過::Blog::Post,但這似乎沒有多大意義。我也試着將它保存在blog/lib/tasks作爲引擎任務,但我無法做到這一點。

我查看過SO和Github,看看有沒有人在引擎中有Rake任務的代碼,但找不到具體的東西。有任何想法嗎?

回答

1

Your create!應該接受一個塊來執行分配,你在那裏做的是分配,然後將結果作爲參數傳遞。

post = Blog::Post.create! do |post| 
    post.title = title 
    post.slug = title.parameterize 
    post.date = date 
    post.user_id = User.find_by_name(user).id 
    post.content = content 
    post.tags = tags 
end 
+0

太棒了。我絕對誤讀了返回的錯誤。你是一個救星! – Kristian 2013-02-16 00:13:53