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
[code]class Restaurante < ActiveRecord::Base
has_many :qualificacoes
has_and_belongs_to_many :pratos
validates_presence_of :nome, :message => "Deve ser preenchido"
validates_presence_of :endereco, :message => "Deve ser preenchido"
validates_presence_of :especialidade, :message => “Deve ser preenchido”
validates_uniqueness_of :nome, :message => "Nome já cadastrado"
validates_uniqueness_of :endereco, :message => “Endereço já cadastrado”
validate :primeira_letra_deve_ser_maiuscula
private
def primeira_letra_deve_ser_maiuscula
errors.add(“nome”, “A primeira letra deve ser maiúscula”) unless nome =~ /[A-Z].*/
end
end[/code]
Model prato
[code]class Prato < ActiveRecord::Base
has_and_belongs_to_many :restaurantes
has_one :receita
validates_presence_of :nome, :message => "- deve ser preenchido"
validates_uniqueness_of :nome, :message => “- nome já cadastrado”
validate :validate_presence_of_more_than_one_restaurante
private
def validate_presence_of_more_than_one_restaurante
errors.add(“restaurantes”, “deve haver ao menos um restaurante”) if restaurantes.empty?
end
end[/code]
Migration do relacionamento
[code]class CreatePratosRestaurantesJoinTable < ActiveRecord::Migration
def self.up
create_table :pratos_restaurantes, :id => false do |t|
t.integer :prato_id
t.integer :restaurante_id
end
end
def self.down
drop_table :pratos_restaurantes
end
end[/code]
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§ o restaurante (p.restaurantes = 1, por exemplo), tenho como retorno o seguinte erro no terminal:
[quote]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[/quote]
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!