如何获取关系表问题的关系记录

时间:2016-08-26 21:44:25

标签: ruby-on-rails ruby

当我开发第一个沙箱应用程序时,我想获得关系表的一些记录。

User.rb:

class User < ActiveRecord::Base
  #has many followed articles
   has_many :follow_articles

和FollowArticle模型:

class FollowArticle < ActiveRecord::Base
  belongs_to :user
  belongs_to :article
end

文章模型:

class Item < ActiveRecord::Base
  has_many :follow_articles
end

我想获得用户的所有后续文章,所以在我的控制器中我有:

@articles = current_user.follow_articles

给了我:

ActiveRecord::Associations::CollectionProxy::ActiveRecord_Associations_CollectionProxy_FollowArticle:x3014X2

在我看来,我可以迭代这些文章:

<% @articles.each do |article| %>
      <%= article.article.name %>
<% end %>

完美无缺。

我是否可以通过这种方式来获取一个Articles数组而不是一个FollowArticles数组,如:

@items = current_user.follow_articles

返回文章而不是followArticles?

1 个答案:

答案 0 :(得分:1)

使用has_many :through

来自the Guide

  

has_many:通过关联通常用于与另一个模型建立多对多连接。该关联表明通过继续第三模型,声明模型可以与另一模型的零个或多个实例匹配。例如,考虑一种患者预约看医生的医疗实践。相关的协会声明可能如下所示:

  class Physician < ApplicationRecord
    has_many :appointments
    has_many :patients, through: :appointments
  end

  class Appointment < ApplicationRecord
    belongs_to :physician
    belongs_to :patient
  end

  class Patient < ApplicationRecord
    has_many :appointments
    has_many :physicians, through: :appointments
  end

所以,完全连接点......

  #User.rb 
  class User < ActiveRecord::Base
    has_many :follow_articles
    has_many :followed_articles, through: :follow_articles
  end