Problema com has_many auto-referencial: através de associações no Rails
-
21-08-2019 - |
Pergunta
Eu estava lendo sobre has_many auto-referencial: através de situações de dados hoje, porque eu estou tentando construir uma aplicação Rails que usa-los. Eu encontrei este situação exemplo na Internet, e eu tenho uma pergunta sobre isso. Deixe-me colocar este código exemplo do blog desse cara:
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
Vamos dizer que eu estou construindo uma página web que lista o primeiro animal no seu banco de dados. Debaixo desta rubrica é uma lista de percentagens (capture_percent). Cada percentual é referente a um animal que caça de animais desta página, mas não dizer-lhe o nome do animal, apenas a porcentagem. Clicando em qualquer determinada percentagem, em seguida, levá-lo para a página do animal correspondente.
Esta é uma espécie de uma pergunta difícil de quebrar a cabeça por aí, eu sei, mas eu estou tentando descobrir isso. Eu teria que criar uma tabela separada para CapturePercent, talvez?
Solução
Será que eu tenho que criar uma tabela separada para CapturePercent, talvez?
Não, não parece ser nada complicado sobre isso:
<ul>
<% @animal.pursuits.each do |pursuit| %>
<li><%= link_to "#{pursuit.capture_percent}%", pursuit.prey %></li>
<% end %>
</ul>