我们最近按照 Rails 指南中的步骤将 Rails 升级到 5.1,但发现以下内容不起作用。我有以下模型定义
class User < ActiveRecord::Base
has_many :members, :dependent => :destroy
has_many :user_accounts, :dependent => :destroy
end
class Member < ActiveRecord::Base
belongs_to :user
has_many :user_accounts, :through => :user
end
class UserAccount < ActiveRecord::Base
belongs_to :user
end
当我尝试执行时,例如
user = User.find 109
member = user.members[0]
member.user_accounts
this generates the following query
SELECT `user_accounts`.* FROM `user_accounts` INNER JOIN `users` ON `user_accounts`.`user_id` = `users`.`id` WHERE `user_accounts`.`users` = NULL
用户正在接受
NULL
检查
应该是users.id也就是109.
需要提及的一件重要事情是,相同的
Member
模型与其他有效的模型使用through
具有其他关系。例如
member.stores
member.credit_cards
但是
member.user_accounts
不起作用。
任何关于如何解决这个问题的帮助都会很棒,谢谢。
has_many :through
关联适用于多对多 关系。成员模型中的belongs_to :user
定义返回单个对象,但has_many :through
关联需要through
定义中的对象集合。所以,这个协会是行不通的。
要访问成员的所有用户帐户,您需要首先从Member模型
has_many :user_accounts, :through => :user
中删除此关联,然后按照以下方法之一进行操作:
member.user.user_accounts
Member模型上指定
delegate
指令delegate :user_acconts, to: :user
并使用member.user_accounts
见
has_many :through
协会的文件在这里