使用自定义rake任务向模型添加代码

时间:2009-12-09 10:48:06

标签: ruby-on-rails rake

我写了一个简单的博客插件(它实际上是一个rails引擎)。它旨在安装到已经设置了用户模型的应用程序中。

为了避免打开我的用户模型并手动插入“has_many:posts”,我想写一个rake任务,自动为我做这个。

如果我将我的引擎作为生成器封装在gem中,那么以下内容可能会起作用:

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

这样的事情可以通过rake任务完成吗?我环顾四周,找不到答案......提前谢谢

3 个答案:

答案 0 :(得分:1)

您绝对可以通过rake任务访问您的模型。您必须确保将其传递给您的环境,以便了解您的模型。例如,

desc"This will insert the Posts"

task(:insertPosts => :environment) do

#your code here

end

答案 1 :(得分:1)

你可以在你的插件中包含一个模型文件来打开User类并添加“has_many:posts”吗?

class User < ActiveRecord::Base
   has_many :posts
end

我认为这样可行,因为您可以随时从任何文件打开Ruby类;因此,无论使用您的插件的项目是否在其模型文件夹中都有user.rb文件,您的文件也将被加载,并且has_many将在运行时添加到User类。

希望它有所帮助。

答案 2 :(得分:0)

这是一个实际修改源是否合适的任务?你考虑过包含一个模块吗?请详细说明您正在努力获得的正确指导。