Rails - 使用has_many关系链接两个模型

时间:2015-10-09 22:46:40

标签: ruby-on-rails ruby-on-rails-4

我已经花了好几周的时间。 我有两个模型:用户和类 用户模型可以有许多类 和类可以有很多用户

这是我的班级模特:

class Class < ActiveRecord::Base
    has_many :users
    belongs_to :users
end

用户模型

class User < ActiveRecord::Base
    has_many :discipleship_classes
end

我无法弄清楚如何在用户控制器中配置#show方法以显示多个类,反之亦然 - &gt;在查看类时显示多个用户。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

您所拥有的是一种标准的has_many/belongs_to关系:

enter image description here

因此,您的模型应该如此构建:

class DisclipleClass < ActiveRecord::Base
    #columns id | user_id | etc | etc | created_at | updated_at
    belongs_to :user
end

class User < ActiveRecord::Base
    has_many :disciple_classes
end

几个重要的注释:

  1. 如果你的系统中有一个ActiveRecord关联,它必须是双向的 - 如果你有has_many :classes,IE必须与belongs_to :class匹配(除非你做了很多配置)
  2. 在声明belongs_to关联时,您需要保持关联的单数。你把它写成复数
  3. 声明关联时,每个名称只能有一个关联。您对belongs_to :usershas_many :users的使用根本无法识别。
  4. 所有关联基本上都是特定SQL关联的封面。您最好阅读relational databases,以及他们的外键如何让他们互动
  5. 条款&#34; class,klass&#34;通常以大多数语言保留。不要使用它们
  6. <强> has_and_belongs_to_many

    现在,如果您想建立many-to-many关系,请使用has_and_belongs_to_many

    enter image description here

    这将使您能够使用以下内容:

    #app/models/user.rb
    class User < ActiveRecord::Base
       has_and_belongs_to_many :disciple_classes
    end
    
    #app/models/disciple_class.rb
    class DiscipleClass < ActiveRecord::Base
       has_and_belongs_to_many :users
    end
    

    这将允许您创建join table,如下所示:

    #disciples_classes_users
    disciple_class_id | user_id 
    

    这将允许您致电:

    @user.disciple_classes
    @disciple_class.users
    

答案 1 :(得分:-1)

show的{​​{1}}视图,

@user