2013-02-15 73 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