Ruby on rails多对多

时间:2013-12-21 11:05:47

标签: ruby-on-rails ruby-on-rails-3

我有两个型号Type和Activity。输入has_many个活动和活动has_many类型。为此,我使用了has_many :through这个东西。这就是它的样子

活动

has_many :typeitems
has_many :types, :through => :typeitem

Typeitem

belongs_to :activity
belongs_to :type

类型

has_many :typeitems
belongs_to :activity

但这感觉不对。我想查询2件事

  1. 特定类型的活动
  2. 特定活动的类型
  3. 当我进入rails控制台并键入types.activity时,我得到一个nil,这意味着我将获得一个对象。我应该将类型模型中的belongs_to更改为has_many。但是它会回到many-to-many。应该有办法。

    我查看了文档并找到了has_and_belongs_to_many。我也读过这个

      

    如果您需要在连接模型上进行验证,回调或额外属性,则应使用has_many:through。

    我现在没有使用它,但我将来可能会想要它。

1 个答案:

答案 0 :(得分:0)

双方都需要has_many :through

活动

has_many :typeitems
has_many :types, :through => :typeitem

Typeitem

belongs_to :activity
belongs_to :type

类型

has_many :typeitems
has_many :activities, through: :typeitems