Adicionar dados em uma tabela com relacionamento NxN  XML
Índice dos Fóruns » Ruby & Ruby on Rails
Autor Mensagem
warcanjow
Entusiasta Java

Membro desde: 01/05/2008 13:16:43
Mensagens: 15
Offline

Olá pessoal,

Sou novo em RoR. Estava fazendo alguns exercícios quando me deparei com um relacionamento NxN, como vocês podem ver aqui:

Model Restaurante


Model prato


Migration do relacionamento



Acho que não cometi erros até aqui, certo? O problema é quando vou criar um objeto do tipo prato e tentar salva-lo: Graças à validação no Model Prato a indicação do estaurante é obrigatório, mas quando tento adicionar ao objeto prato(p) o restaurante (p.restaurantes = 1, por exemplo), tenho como retorno o seguinte erro no terminal:

NoMethodError: undefined method `each' for 1:Fixnum
from /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/associations/association_collection.rb:320:in `replace'
from /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/associations.rb:1325:in `restaurantes='
from (irb):15


Gostaria que vocês me respondessem, por favor, como faço pra criar um objeto prato e salva-lo no banco de dados, assim como fazer com que a tabela pratos_restaurantes seja atualizado automaticamente.

Abraço!
[Email] [MSN]
urubatan
Moderador
[Avatar]

Membro desde: 21/09/2002 10:31:26
Mensagens: 2481
Localização: Porto Alegre/RS
Offline

pelo erro, parece que tu ta tentando fazer algo tipo

O código nem chegou na validação ainda, então não é com a tua validação o problema ...

posta ai o código que tu ta usando para tentar salvar o prato e o restaurante ...

Outra coisa, eu sempre acho que não é boa idéia utilizar o has_and_belongs_to_many, por exemplo:
se um prato é servido em mais de um restaurante, ele pode ser bom em um restaurante e não ser em outro, ou ter preços diferentes, neste caso tu pode quere salvar estas diferenças. Se isto for verdade, o que quase sempre é, seria melhor criar uma entidade intermediaria que representa esta associação prato/restaurante, e fazer a associação do prato e do restaurante com esta entidade intermediaria, e não direto um com o outro. Segue exemplo (escrito direto no browser, então pode não funcionar de cara):


Bom, esta é só uma idéia, mas como eu disse, o problema não esta na tua validação, pelo erro, parece que esta onde tu ta tentando adicionar um restaurante a um prato.

[]'s
Rodrigo Urubatan
http://www.urubatan.com.br
Melhor livro de RoR do brasil: http://livro.urubatan.com.br
[WWW]
 
Índice dos Fóruns » Ruby & Ruby on Rails
Ir para:   
Powered by JForum 2.1.8 © JForum Team