加入2个表的查询(Rails 4)

时间:2014-04-04 04:48:11

标签: ruby-on-rails

我在show.html.erb中有以下内容:

<% if @doctor.referrals_as_from.count > 0 %> 
  <% @doctor.referrals_as_from.each do |referral| %>
    <%= referral.to_id %>  
  <% end %>
<% end %> 

这很好用,从我的推荐模型中给出一个匹配的ID号列表。

但是,我不想获取一个id号列表,而是通过在引用中使用标识的id来交叉引用Doctors模型中的“full_name”列,基本上是内部联接。这样做最优雅的方式是什么?向控制器添加新方法并进行连接或包含,还是有更简单的方法?

型号:

doctor.rb
class Doctor < ActiveRecord::Base
  self.primary_key = "npi"
  has_many :referrals_as_from, :class_name => 'Referral', :foreign_key => 'from_id'
  has_many :referrals_as_to, :class_name => 'Referral', :foreign_key => 'to_id'
end

referral.rb
class Referral < ActiveRecord::Base
  belongs_to :doctor
end

2 个答案:

答案 0 :(得分:0)

使用此功能。

<% if @doctor.referrals_as_from.count > 0 %> 
      <% @doctor.referrals_as_from.each do |referral| %>
        <%= referral.doctor.full_name  %>  
      <% end %>
<% end %> 

答案 1 :(得分:0)

推荐模型实际上有两个与之关联的医生,由to_id和from_id定义。所以你可能需要做以下事情:

referral.rb
class Referral < ActiveRecord::Base
  belongs_to :to_doctor, :class_name => "Doctor", :primary_key => "to_id", :foreign_key => "npi" 
  belongs_to :from_doctor, :class_name => "Doctor", :primary_key => "from_id", :foreign_key => "npi
end

然后代码变为

referral.to_doctor.full_name