2013-06-23 4 views
0

J'ai une classe de propriétaire et de commentaire. Propriétaire a 1: N commentaires. Lorsqu'un propriétaire est créé, il crée un commentaire sur le même formulaire (imbriqué).Rails vérifiant db pour un utilisateur déjà existant et ajouter un commentaire sans créer un nouvel utilisateur

Lorsque le formulaire est envoyé, la commande users_controller # create est appelée.

Je veux vérifier la base de données si le propriétaire avec le même nom, la même ville et le même État existe déjà et ajouter le commentaire à ce propriétaire au lieu d'en créer un nouveau.

def create  
#check if a landlord of the same name already exists and add comments to that 


    if Landlord.find_by_name(params[:name]) && Landlord.find_by_city(params[:city])&& Landlord.find_by_province(params[:province]) 
    @landlord_exists = Landlord.find_by_name(params[:name]) && Landlord.find_by_city(params[:city])&& Landlord.find_by_province(params[:province]) 

    @landlord_exists.comments.build 

    @landlord_exists.comments[0].setIP request.remote_ip 

    @landlord_exists.save 
    else 
     @landlord = Landlord.new(params[:landlord]) 
     @landlord.comments[0].setIP request.remote_ip 
     if @landlord.save 

     flash[:success] = "Thank you for submitting a Landlord" 
     redirect_to landlords_path 
     else 

     end 
    end 
end 

mise à jour # 1 jusqu'à

def create  

    @landlord = Landlord.where(:name => params[:name], :city => params[:city], :province => params[:province]).first_or_create! 

    @landlord.comments[0].setIP request.remote_ip 


    if @landlord.save  
     redirect_to landlords_path 
    else 
    end 

    end 

La ligne

@landlord = Landlord.where(:name => params[:name], :city => params[:city], :province => params[:province]).first_or_create! 

semble être retourner un objet nul mettant ainsi des erreurs lors SETIP est appelée. Qu'est-ce qui causerait cela? Je l'ai essayé dans le terminal et ça a bien fonctionné même si j'utilisais des valeurs codées en dur.

+0

Alors, quelle est votre question? Votre code ne fonctionne pas? Quelles erreurs jette-t-il? – depa

Répondre

0

La méthode la plus simple consiste à utiliser la méthode first_or_create! d'ActiveRecord :: Relation. Ceci effectuera une requête basée sur les params entrés sous la forme, et créer un enregistrement si aucune correspondance ne trouve, ce qui signifie que vous pouvez obtenir des if ... else conditionals:

@landlord = Landlord.where(params[:landlord]).first_or_create! 
@landlord.comments.build 
# etc ... 
+0

J'ai essayé \t @landlord = Landlord.where (: nom => params [: nom],: ville => params [: ville],: province => params [: province]). First_or_create! Mais quand je tente @ landlord.comments [0] .setIP request.remote_ip Je reçois une erreur de classe nulle sur la méthode d'appel setIP. – Derptacos

Questions connexes