| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/05/2010 13:03:41
|
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!
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/05/2010 14:14:57
|
urubatan
Moderador
![[Avatar]](/images/avatar/fe9fc289c3ff0af142b6d3bead98a923.jpg)
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
|
|
|
 |
|
|
|
|