自引用的问题has_many:通过Rails中的关联

时间:2008-12-13 06:42:46

标签: ruby-on-rails ruby activerecord associations

我正在阅读自我引用has_many:通过今天的数据情况,因为我正在尝试构建一个使用它们的Rails应用程序。我在互联网上发现了这个example situation,我对此有疑问。让我在这个人的博客中发布这个示例代码:

create_table :animals do |t|
  t.string :species
end
create_table :hunts do |t|
  t.integer :predator_id
  t.integer :prey_id
  t.integer :capture_percent
end

class Animal < ActiveRecord::Base
  has_many :pursuits,  :foreign_key => 'predator_id',
                       :class_name => 'Hunt',
                       :dependent => :destroy
  has_many :preys,     :through => :pursuits
  has_many :escapes,   :foreign_key => 'prey_id',
                       :class_name => 'Hunt',
                       :dependent => :destroy
  has_many :predators, :through => :escapes
end
class Hunt < ActiveRecord::Base
  belongs_to :predator, :class_name => "Animal"
  belongs_to :prey,     :class_name => "Animal"
end

假设我正在构建一个列出其数据库中第一个动物的网页。此标题下方是百分比列表(capture_percent)。每个百分比指的是这个页面的动物狩猎的动物,但它不会告诉你动物的名字,只是百分比。点击任何给定的百分比,您将进入相应的动物页面。

这是一个很难解决的问题,我知道,但我想弄清楚。我是否必须为CapturePercent创建一个单独的表,可能吗?

1 个答案:

答案 0 :(得分:8)

  

我是否必须为CapturePercent创建一个单独的表?

完全没有,似乎没有任何复杂的事情:

<ul>
<% @animal.pursuits.each do |pursuit| %>
  <li><%= link_to "#{pursuit.capture_percent}%", pursuit.prey %></li>
<% end %>
</ul>