2008-12-13 9 views
9

Czytałem o selfreferencyjnym has_many: poprzez dzisiejsze sytuacje danych, ponieważ próbuję zbudować aplikację Rails, która ich używa. Znalazłem to example situation w Internecie i mam pytanie na ten temat. Pozwól mi pisać ten przykładowy kod z bloga tego gościa:Problem z samoodnawialnymi has_many: poprzez asocjacje w Railsach

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 

Powiedzmy buduję stronę internetową z listą pierwsze zwierzę w swojej bazie danych. Pod tym nagłówkiem znajduje się lista wartości procentowych (capture_percent). Każda wartość procentowa odnosi się do zwierzęcia, które poluje na tę stronę, ale nie podaje imienia zwierzęcia, tylko procent. Kliknięcie dowolnej wartości procentowej spowoduje przejście do odpowiedniej strony zwierzęcia.

To jest trudne pytanie, które trzeba owinąć, wiem, ale próbuję to rozgryźć. Czy mógłbym stworzyć osobną tabelę dla CapturePercent?

Odpowiedz

8

Czy muszę utworzyć oddzielną tabelę dla CapturePercent?

Wcale nie, tam nie wydaje się być cokolwiek skomplikowana na ten temat:

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