Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 我可以用父模型创建新的ActiveRecord模型吗&;批量生产儿童模型?_Ruby On Rails_Ruby_Sqlite_Activerecord - Fatal编程技术网

Ruby on rails 我可以用父模型创建新的ActiveRecord模型吗&;批量生产儿童模型?

Ruby on rails 我可以用父模型创建新的ActiveRecord模型吗&;批量生产儿童模型?,ruby-on-rails,ruby,sqlite,activerecord,Ruby On Rails,Ruby,Sqlite,Activerecord,我想通过一种方法创建一些ActiveRecord模型 我的记录如下 class公司 irb(主要):022:0>美国参与 => # 我可以用一行创建一些记录吗??或者不能???您不能在一行中完成此操作。您正试图实例化并传递一个只需要id的整个公司对象。此外,由于尚未创建用户,因此无法将用户id附加到此公司 您可以在一个方法中完成所有这些,但出于许多原因,这可能是一个坏主意。我建议将您的逻辑分解为多个易于测试和维护的方法 我很欣赏你的评论:)我理解你的想法,一行是反模式的。我把这个方法改成了多行

我想通过一种方法创建一些ActiveRecord模型

我的记录如下

class公司
我的环境

$ ruby -v
ruby 2.4.5p335 (2018-10-18 revision 65137) [x86_64-darwin17]
$ rails -v
Rails 5.0.7.1
我试过这个。但是出现了一个错误

u=User.create(
公司:company.create,
小组:[
Team.create(公司:company.create)
]
)
irb(主):021:0*u错误
=>#[“无效”]},@details={:participations=>[{:error=>:invalid}]>
irb(主要):022:0>美国参与
=> #

我可以用一行创建一些记录吗??或者不能???

您不能在一行中完成此操作。您正试图实例化并传递一个只需要id的整个公司对象。此外,由于尚未创建用户,因此无法将用户id附加到此公司


您可以在一个方法中完成所有这些,但出于许多原因,这可能是一个坏主意。我建议将您的逻辑分解为多个易于测试和维护的方法

我很欣赏你的评论:)我理解你的想法,一行是反模式的。我把这个方法改成了多行
rb company=company.create;团队=[团队创建(公司:公司)];user=user.create(company:company,teams:teams)
但我还是遇到了同样的错误。。。如何通过ActiveRecord::Relation创建参与记录??您可以使用gem,例如。但是它不会运行您的模型级验证(不过,您可以在批量插入之前手动运行它们)。据我所知,ActiveRecord不支持批量导入。因此,您可以选择使用循环(如果愿意,可以通过一些包装器方法),或者在SQL中执行大容量插入,跳过ActiveRecord。谢谢您的评论!我知道你是谁。但是我不能用那块宝石来解决我的问题。我的问题不是将模型作为多个记录导入,而是通过一个创建方法导入一些多个模型…:(如果您的问题是ActiveRecord是否支持此功能,那么我恐怕答案是否定的。但是,如果您不介意在循环中创建记录,那么您可以使用实用方法来完成此操作。
irb(main):021:0* u.errors
=> #<ActiveModel::Errors:0x00007faf7f5668b0 @base=#<User id: nil, company_id: 25, name: nil, created_at: nil, updated_at: nil>, @messages={:participations=>["is invalid"]}, @details={:participations=>[{:error=>:invalid}]}>
irb(main):022:0> u.participations
=> #<ActiveRecord::Associations::CollectionProxy [#<Participation id: nil, company_id: nil, user_id: nil, team_id: 15, created_at: nil, updated_at: nil>]>