Rails:has_many 通过不返回结果

问题描述 投票:0回答:1

我们最近按照 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
不起作用。

任何关于如何解决这个问题的帮助都会很棒,谢谢。

ruby-on-rails ruby activerecord ruby-on-rails-5
1个回答
0
投票

has_many :through
关联适用于多对多 关系。成员模型中的
belongs_to :user
定义返回单个对象,但
has_many :through
关联需要
through
定义中的对象集合。所以,这个协会是行不通的。

要访问成员的所有用户帐户,您需要首先从Member模型

has_many :user_accounts, :through => :user
中删除此关联,然后按照以下方法之一进行操作:

  1. 使用
    member.user.user_accounts
  2. 像这样在
    Member
    模型上指定delegate指令
    delegate :user_acconts, to: :user
    并使用
    member.user_accounts

has_many :through
协会的文件在这里

© www.soinside.com 2019 - 2024. All rights reserved.