2010-09-11 7 views
1

rails 3 newbie, en utilisant pour auth ... DeviseRails 3, modélisation Question

Je veux créer les modèles suivants:

class Instance < ActiveRecord::Base 
has_many :users 
has_many :notes 
end 

class User < ActiveRecord::Base 
belongs_to :instance 
end 

class Note < ActiveRecord::Base 
belongs_to :instance 
end 

Pour créer une nouvelle note dans le notes_controller.rb

def create 
@note = instance.notes.build(params[:note].merge(:instance_id => current_user.instance_id)) 
end 

Mais je reçois l'erreur suivante: "variable locale définie ou une méthode` instance » pour #"

Des idées?

Répondre

0

Vous n'avez encore rien assigné à "instance", donc il n'y a rien à référencer. Si vous connaissez le dossier d'instance existe déjà dans la base de données, vous pouvez faire quelque chose comme:

@instance = current_user.instance 
@note = Note.create(:instace_id => @instance.id) 

Sinon, vous auriez besoin de vérifier et de créer d'abord si nécessaire, en utilisant le même genre de syntaxe.

+0

Et cela appartient au contrôleur pour la note, n'est-ce pas? – AnApprentice

+0

@nobosh oui. Ce code est appelé lorsque vous cliquez sur le lien correspondant, par ex./notes/create, puis les variables d'instance que vous déclarez dans cette méthode de contrôleur sont également accessibles dans la vue. – bnaul

+0

Merci bnaul, j'apprécie vraiment! – AnApprentice