rails:从has_and_belongs_to_many关系访问表

时间:2014-04-11 20:35:46

标签: ruby-on-rails ruby

的ActiveRecord :: Base.connection.tables

["groups", "groups_users", "members", "questions", "users", "votes", "schema_migrations"]

正如你所知,我有一个名为“groups_users”的表,但我似乎无法访问它。我可以通过 用户 访问“用户”表。我可以通过 群组 访问“群组”表格。但是我究竟如何访问“groups_users”?我试过了:

Groups_Users
Groups_User
GroupsUsers
GroupsUser

我也尝试了单一版本的群组。有关如何访问它的任何想法?文档也会有所帮助。

class Group < ActiveRecord::Base
  has_and_belongs_to_many :users
end

用户

class User < ActiveRecord::Base
  has_and_belongs_to_many :groups
end

3 个答案:

答案 0 :(得分:3)

如果要访问它,您必须为groups_users表定义模型

class GroupUser < ActiveRecord::Base
  self.table_name = "groups_users"
  belongs_to :user
  belongs_to :group
end

你也可以像这样定义你的关联

class Group < ActiveRecord::Base
  has_many :group_users
  has_many :users, :through => :group_users
end


class User< ActiveRecord::Base
  has_many :group_users
  has_many :groups, :through => :group_users
end

您可以阅读差异here

答案 1 :(得分:1)

Vimsha的答案是正确的;我还会与您分享HABTM vs HMT的经验:

  

HABTM仅适用于“不可访问”的数据。 Rails加入   引擎将HABTM视为没有模型,因此您无法直接访问数据。 HMT(has_many :through)的工作原理是模型和模型。然后允许你访问它

HABTM&amp;之间的差异HMT基本上是通过模型直接访问。 HABTM用于“快速和肮脏”的收集访问; HMT用于更多的资金数据访问

答案 2 :(得分:0)

您需要创建一个模型。

class GroupsUsers < ActiveRecord::Base
end