Use "referências" para vários itens do mesmo tipo

votos
2

Então, eu estou ensinando-me Ruby on Rails, com um fundo PHP. Eu tenho escrito, um pedido de desleixado prova-de-conceito PHP chamada 2NDP. Eu quero recriar isso em Ruby on Rails (mas mais básico, mais limpo, e com uma interface melhor), para que eu possa aprender alguma dos princípios.

2NDP é um site onde você pode basicamente escrever seus próprios livros Escolher-seu-próprio-aventura, mas de forma colaborativa, com outras pessoas. A maneira que eu fiz este trabalho com PHP / MySQL é, eu tinha uma mesa de histórias e uma tabela de páginas. As páginas que pertencem a histórias (obviamente), mas cada página teria referências a até quatro outras páginas por ter quatro colunas separadas, uma para cada possível ID página que poderia ser referenciado.

Então, agora na minha aplicação RoR, eu tenho histórias que têm páginas que estão associados com eles. Eu preciso de uma maneira de obter as páginas para fazer referência a outro, mas a possibilidade de mais de uma referência por página (uma página pode fazer referência até quatro outras páginas).

Eu realmente gosto da coisa referências que RoR tem, mas existe alguma maneira de implementar graciosamente este tipo de sistema? Tenha em mente que a minha única experiência RoR está andando através de quatro tutoriais, e eu estou tentando voltar a aplicar o que aprendi com uma aplicação na vida real.

Publicado 10/12/2008 em 03:04
fonte usuário
Em outras línguas...                            


2 respostas

votos
2

Em vez de ter quatro colunas separadas, uma tabela separada juntar pode ser mais apropriado. Por exemplo:

Páginas -> LinkedPages -> Páginas

Em seguida, você pode criar um has_many através de relacionamento.

class Pages < ActiveRecord::Base
  has_many :linked_pages
  has_many :pages, :through => :linked_pages
end

class LinkedPages < ActiveRecord::Base
  belongs_to :pages, :class_name => "Pages", :foreign_key => "page_id"
  belongs_to :linked_pages, :class_name => "Pages", :foreign_key => "linked_id" 
end

Em seguida, ao usar seu objeto de página você pode simplesmente dizer:

my_page.pages
Respondeu 10/12/2008 em 09:42
fonte usuário

votos
0

Hates_, que foi útil, mas se alguém precisa de uma explicação mais aprofundada sobre esse tipo de coisa, leia sobre isso aqui .

Respondeu 12/12/2008 em 03:30
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more