has_many和has_one关联

时间:2014-05-20 15:35:30

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

有两种型号:

  1. Ť
  2. T组
  3. TGroup对象可能有很多T对象。 TGroup对象有一个最喜欢的T对象。

    我想定义将为我提供以下功能的关联:

    1. TGroup.first.ts#将返回属于TGroup.first对象
    2. 的T对象列表
    3. TGroup.first.favorite#将返回TGroup.first对象
    4. 的收藏T对象
    5. TGroup.first.ts << T.first#将T.first对象附加到TGroup.first对象
    6. TGroup.first.favorite = T.first#将T.first对象设置为 TGroup.first object
    7. 的最爱

      我试图实施的解决方案是:

      1. 在T
      2. 上定义t_group_id字段(整数)
      3. 在TGroup上定义favorite_id字段(整数)
      4. 在TGroup模型
      5. 上定义以下关联
          

        has_many:ts,:class_name =&gt; T.to_s

             

        has_one:t,:class_name =&gt; T.to_s,:foreign_key =&gt; :id,:primary_key =&gt; :favorite_id

        我没有成功定义&#34;最喜欢的&#34; (应该是&#34;:as =&gt;:最喜欢&#34;?)别名,所以我开始使用&#34; t&#34;代替。 不幸的是,这样做我无法设置TGroup.first.t = T.first。不是将TGroup.first.t.id设置为T.first.id,而是在T模型上进行更改。

1 个答案:

答案 0 :(得分:2)

我认为你需要的是belongs_to关联而不是has_one关联。

根据文档,外键在表中声明了belongs_to关联的类,所以这样的事情应该完成:

belongs_to :favorite, :class_name => T.to_s

根据每个特定的上下文,has_one / belongs_to关联有时会有点混乱。

希望这有帮助。