如何迭代Active Records关系并在Ruby on Rails中找到基于它的信息?

时间:2017-05-18 14:28:19

标签: ruby-on-rails ruby

假设我有三节课。用户,UserOrganisation,Organizations。

用户拥有其用户ID,加密密码等。

UserOrganisation将organisationid作为外键,userid也作为外键。组织有id,组织名称,地址等。

假设我有一个变量,其中包含所有UserOrganisation的数据。

@user = User.where(email: "test@test.com")

@userOrganisation = @user.userOrganisation

如何从@userOrganisation获取组织ID并使用ID从组织表中获取名称?

我想将组织名称呈现为JSON

2 个答案:

答案 0 :(得分:1)

class User < ApplicationRecord
  has_many :user_organizations
  has_many :organizations, through: :user_organizations
end

# rails g model user_organization user:belongs_to organization:belongs_to
class UserOrganization < ApplicationRecord
  belongs_to :user 
  belongs_to :organization
end

class Organization < ApplicationRecord
  has_many :user_organizations
  has_many :organizations, through: :user_organizations
end

这会在UserOrganization之间以user_organizations作为联接表创建a many to many association。请注意,列,方法名称和关联(几乎除了类之外的所有内容)都应该是snake_case

要获得组织,用户是您可以使用的成员:

user.organisations

Rails将自动加入user_organizations表格。

如果您想要一个包含每个组织的ID和名称的数组:

user.organisations.pluck(:id, :name)

答案 1 :(得分:0)

@userOrganisation.reflections['assigned_to'].options[:foreign_key]

如果你想要id,这应该得到id,但正如一条评论所提到的,你应该设置正确的关联并以这种方式处理