我想通过一种方法创建一些ActiveRecord模型。
我的记录在下面。
class Company < ApplicationRecord
has_many :users
has_many :teams
has_many :participations
end
class User < ApplicationRecord
belongs_to :company
has_many :participations
has_many :teams, through: :participations
end
class Team < ApplicationRecord
belongs_to :company
has_many :participations
has_many :users, through: :participations
end
class Participation < ApplicationRecord
belongs_to :company
belongs_to :user
belongs_to :team
end
我的环境。
$ 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: Company.create,
teams: [
Team.create(company: Company.create)
]
)
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>]>
我可以创建一个记录吗?还是不能??
答案 0 :(得分:0)
您不能在一行中执行此操作。您正在尝试实例化并传递仅需要ID的整个Company对象。此外,由于尚未创建用户,因此无法将user_id附加到该公司。
您可以在一个方法内完成所有这些操作,但是出于多种原因,这可能不是一个好主意。我建议将您的逻辑分解为易于测试和维护的多种方法。