Pergunta

Sou iniciante com programação do Rails 3 e tenho um problema em criar o modelo certo.

Digamos que exista um aplicativo para gerenciar a bibliografia de um livro, que gere o mapeamento de cada capítulo da lista de artigos referenciados. Então, para a parte do artigo, eu poderia ter algo como:

create_table :articles do |t|
  t.string :title
  t.text   :content
  ...

No lado da bibliografia, eu gostaria de ter um modelo como

create_table :bibliographies do |t|
  t.string :chapter
  t.text   :ref
  ...

Onde ref é na verdade uma variedade de referências a artigos, por isso seria gerenciado via serialize Método ActiveRecord.

Ok, então agora a questão é sobre como fazer para que os elementos da matriz @bibliography.ref são referências (no sentido de rubi) a vários article_id.

Como faço para modelar esse relacionamento e qual código do Rails 3 devo escrever para expressar isso? O que me confunde é que um único campo de uma única instância de @bibliography referenciaria a muitos @artigo.id.

desde já, obrigado

Foi útil?

Solução

Se você realmente deseja armazenar relacionamentos assim, eu definiria um método no modelo de bibliografia, algo assim

(Assumindo que o REF é uma variedade de IDs)

def articles
  Article.where(:id => self.ref)
end

Eu armazenaria o relacionamento de maneira diferente. Adicione uma terceira tabela/modelo artigos_bibliografias com Artigo_ID e Bibliography_ID Fields. Então você pode usar o Has_Many: através da associação que está incorporada ao ActiveRecord.

Na sua aula de bibliografia, você teria algo como:

has_many :articles_bibliographies
has_many :articles, :through => :articles_bibliographies

então você pode simplesmente fazer @bibliography.articles

Leia mais aqui http://guides.rubyonrails.org/association_basics.html#the-has_many-through-sociation

Outras dicas

Após a sugestão de Egze, encontrei uma maneira de resolver meu problema (sem usar matrizes!). Então, eu crio um relacionamento Has_Many-Through, mas, como quero salvar o pedido para os artigos como eles são mencionados na bibliografia, a tabela Articles_bibliographies também possui um campo Order_NR, onde eu armazeno o primeiro, segundo etc. Artigo mencionado na bibliografia:

create_table :articles_bibliographies do |t|
   t.references  :article
   t.references  :bibliography
   t.integer     :order_nr

Dessa forma, posso recuperar e mostrar uma lista ordenada de elementos com:

@bibliography.articles.order("order_nr ASC")
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top