当我开发第一个沙箱应用程序时,我想获得关系表的一些记录。
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?
答案 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