这是Rails 7中的一个bug吗?
# user.rb
has_one :company
has_many :foos
# company.rb
belongs_to :user
has_many :foos
# foo.rb
belongs_to :user
belongs_to :company
当我这样做:
User.first.company.foos.build
# => id: nil, user_id: nil, company_id: 1, ...
为什么user_id
是nil
?
这是一个控制器。我必须使用.tap
或.merge
:
User.first.company.foos.build(foo_params.merge({ user_id: 1 })
或者:
User.first.company.foos.build(foo_params.tap { |par| par[:user_id] = 1 })
我希望build
同时使用模型的primary_key填充user_id
和company_id
。
2条答案
按热度按时间vohkndzv1#
为什么
user_id
是nil?
因为当你调用
User.first.company.foos.build
它首先运行
User.first
例如:
#<User id: 1, company_id: 1, ...
相当于:接下来,它让上面的用户继续运行:公司简介
相当于:
最后我想说什么
User.first.company.foos.build
等于company.foos.build
if
User.first.foos.build
=〉user_id
notnil
if
Company.first.foos.build
=〉company_id
notnil
在本例中=〉
foos
是从company
构建那你错在哪里
user.rb
中的冗余has_many :foos
因为用户
has_one :company
和公司has_many :foos
=〉当然是用户has_many :foos
溶液
删除
user.rb
中的has_many :foos
和foo.rb中的belongs_to :user
b4lqfgs42#
我使用了领域驱动设计方法:
在控制器中: