Rails动态创建模型并使用它。

问题描述 投票:0回答:1

我正在创建一个模型,它的名字是 rake 任务的输入参数。在 rake 任务之后,我希望使用该模型来插入数据。

例如,我调用输入为Apple的rake任务,并创建了Apple模型。然后我希望做 Apple.insert_all([{name: x},{name: y}...]) 在另一个耙任务中,但我得到 NameError: uninitialized constant Apple

下面是我做的比较好的流程图。

Rake::Task["create:fruit"].invoke("Apple") # create model here
Rake::Task["create:insert"].invoke("Apple") # insert data here but getting error

我是这样处理第二个耙任务中的输入的。

task :insert, [:name] do |t, args|
    fruit = args.name 
    fruit.classify.constantize.insert_all(xxx)
end

有什么建议吗?

ruby-on-rails ruby rake-task
1个回答
0
投票

我创建了一个新的项目,并尝试你的代码。我认为问题是在这一行

fruit.classify.constantize.insert_all(xxx)

代码bellow工作,并创建新的记录。我使用了一个简单的 rake 命令来运行它。

create.rake 文件

namespace :create do
  desc "TODO"
  task :insert, [:name] do |t, args|
    klass = Object.const_get(args.name)
    klass.create([{name: 'x'},{name: 'y'}])
    p klass.count # testing new records have been saved
  end
end

Rakefile 档案

require File.expand_path('../config/application', __FILE__)

Rails.application.load_tasks

task :default do
  Rake::Task["create:insert"].invoke("Apple")
end
© www.soinside.com 2019 - 2024. All rights reserved.