has_one关联的命令行中所有用户的嵌套资源create_checklist

时间:2017-02-05 20:00:36

标签: ruby-on-rails ruby-on-rails-4 ruby-on-rails-5 nested-resources

很抱歉,如果已经提出这个问题,但我找不到类似的问题。

使用rails 5.

我有一个双嵌套资源

resources :users do
    resources :checklists do
        resources :checklist_items do
            member do
                patch :completed
            end
        end
    end
end

我有

user.rb

user has_one :checklist

checklist.rb

checklist belongs_to :user

我知道如何在命令行中为一个用户创建新的核对清单:

User.checklist.create

现在,我想通过命令行为数据库中的所有现有用户创建一个新的核对表。有点像这个虚构的命令:

User.all.checklist_create

以便每个用户都获得一份清单。我该如何做到这一点?

2 个答案:

答案 0 :(得分:1)

这对我有用,但也许有更短的方法来实现它?

User.all.each do |user|
user.create_checklist
end

答案 1 :(得分:0)

Rails和Ruby充满了大量的元编程,如果你所建议的方法实际存在,我也不会感到惊讶。但是,从设计的角度来看,我认为这将是一种矫枉过正。想象一下,如果您有10K +用户,并且您想使用该单个命令为所有10k用户创建票证?每张票的字段怎么样? 因此,为了解决您的问题,您可以考虑采用自己的方式进行选择。

工厂女孩

对于工厂女孩,您有create_listbuild list等方法,请查看他们的文档以获取更多信息。从他们的名字来看,他们看起来足够直观这些方法可以帮助您创建多个对象的列表,并根据您的工厂结构,您可以在一行中获得所需的内容。

Seed.rb

Rails提供了一个seed.rb文件,您可以在其中添加ruby脚本,该脚本应该用于为您的数据库设置一些默认值。默认情况下,seed.rb文件中有一个示例脚本,您可以将其用作参考来设置所需的结构。

但是你只想使用这个选项,如果你想要的只是测试/虚拟数据来玩唉,你的用例可能会有所不同。但是如果您确实需要这些数据全部用于测试,我建议您遵循TDD方法。希望这会对你有所帮助。