我遇到了Rails 4连接表的问题。我有一个非常简单的设置,它在我的应用程序的其他地方工作,使用非常规命名表用于用户,组和用户组成员。我这次尝试使用适当的传统命名进行设置,但它只是不起作用。
涉及的模型包括User,ManagementGroup和ManagementGroupsUser db表:management_groups_user,management_groups,users
应用程序/模型/ user.rb
Class User < ActiveRecord::Base
...
has_many :management_groups, through: management_groups_users
has_many :management_groups_users
....
应用程序/模型/ management_group.rb
class ManagementGroup < ActiveRecord::Base
has_many :users, through: :management_groups_users
has_many :management_groups_users
应用程序/模型/ management_groups_user.rb
class ManagementGroupsUser < ActiveRecord::Base
belongs_to :users
belongs_to :management_groups
该关联似乎与@ user.management_groups_users有关,但没有别的。我很确定这是命名/多元的问题,但我无法弄清楚。
答案 0 :(得分:1)
这是加入其余模型的模型user.rb和management_group
#app/models/management_groups_user.rb
belongs_to :user
belongs_to :management_group
由于我们将使用上面的模型访问另一个模型management_group,然后
#app/models/user.rb
has_many :user_management_groups #This should come first
has_many :management_groups, through: user_management_groups
由于我们将使用上述模型访问其他用户模型,然后
app/models/management_group.rb
has_many :user_management_groups
has_many :users, through: :user_management_groups
现在应该工作
答案 1 :(得分:0)
这样做。
应用程序/模型/ user.rb
has_many :user_management_groups
has_many :management_groups, through: user_management_groups
应用程序/模型/ management_group.rb
has_many :user_management_groups
has_many :users, through: :user_management_groups
应用程序/模型/ management_groups_user.rb
belongs_to :user
belongs_to :management_group
我希望这些协会会帮助你。
答案 2 :(得分:0)
如果传递外键和类名,这是另一种方法。
应用程序/模型/ user.rb
has_many :user_management_groups, :foreign_key => "key", :class_name => "ClassName"
has_many :management_groups, through: user_management_groups, :foreign_key => "key", :class_name => "ClassName"
应用程序/模型/ management_group.rb
has_many :user_management_groups
has_many :users, through: :user_management_groups
应用程序/模型/ management_groups_user.rb
belongs_to :user, class_name: "ClassName"
belongs_to :management_group, class_name: "ClassName"
这是另一种方式。
答案 3 :(得分:0)
重要的是要认识到Rails用于HABTM并使用了许多约定。 HABTM没有模型,因此需要推断表名,正如其他人指出的那样,表名既是复数形式又是字母顺序。
如果您正在做的事情很多,并且有一个模型,那么习惯上就是要单数第一个单词,复数第二个单词。查看示例
用户拥有并属于许多组。
HABTM :表名应为groups_users
遍历:表名应为user_groups(翻转顺序更直观)
后者的模型将是UserGroup。有很多通过将其指定为through: :user_groups