Paris on Rails 2008

Ouverture de session

Commentaires récents

Syndication
Flux XML

je ne sais plus ou est le problème!

je ne sais plus ou est le problème!
Posté par zandrygasy le Dimanche, 7 Septembre, 2008 - 10:13pm. Développement

J'essaye de faire une page commentaire! voici le code! J'ai essayé de restructuré ma base de donnée mais rien n'y fait! C'est un peu mal structuré mais si quelqu'un peut m'aider?!

def create
if params[:place_id]
@place = Place.find(params[:place_id])
@comment = @place.comments.new(params[:comment])
respond_to do |format|
if @comment.save
flash[:notice] = 'comment was successfully inserted.'
format.html { redirect_to @place }
format.xml { render :xml => @comment, :status => :created, :location => @comment }
else
format.html { render :action => "new" }
format.xml { render :xml => @comment.errors, :status => :unprocessable_entity }
end
end
else if params [:event_id]
@event = Event.find(params[:event_id])
@comment = @event.comments.new(params[:comment])
respond_to do |format|
if @comment.save
flash[:notice] = 'comment was successfully inserted.'
format.html { redirect_to @event }
format.xml { render :xml => @comment, :status => :created, :location => @comment }
else
format.html { render :action => "new" }
format.xml { render :xml => @comment.errors, :status => :unprocessable_entity }
end
end
end
end
end

Et ça renvoye:
wrong number of arguments (1 for 0) sur la ligne du else if



[ Vous devez vous connecter ou vous enregistrer pour écrire des commentaires | sujet précédent | sujet suivant | envoyer par email ]

Options d'affichage des commentaires
Sélectionnez la méthode d'affichage des commentaires que vous préférez, puis cliquez sur "Sauvegarder" pour activer vos changements.

Sujet: 
Attention au sucre syntaxique !
Auteur: 
jasperiel
Date: 
Lun, 08/09/2008 - 10:47

Salut, ton problème vient de l'espace entre params et [:event_id].

"params" n'est pas une vraie hash malgré le sucre syntaxique associé.
"params" est une méthode ne prenant pas de paramètre, et avec l'espace tu appelles params en lui passant un tableau avec un seul élément, le symbole :event_id. D'où bug.

Pour info, si params avait été une vraie Hash (une valeur quoi), tu aurais eu NoMethodError: undefined method `params' for main:Object"

Ruby est un langage interprété qui offre plein de sucre syntaxique pour être confortable à développer, en contrepartie on s'expose à ce type d'erreurs d'inattention.

Je te recommande vivement d'utiliser un vrai éditeur de texte si ce n'est pas déjà le cas, un qui fasse de la coloration syntaxique, comme TextMate ou Emacs.

Ah, au passage, ta base de données n'y est absolument pour rien et je me demande ce que tu as pu trouver à y réorganiser... Ton message d'erreur te parle de nombre de paramètres, pas de base de données ;)


[ Vous devez vous connecter ou vous enregistrer pour écrire des commentaires | envoyer par email ]

Sujet: 
toujours un problème
Auteur: 
zandrygasy
Date: 
Lun, 08/09/2008 - 19:11

La raison pour laquelle j'ai réorganisé la base, c'est que j'ai utilisé "polymorphic", et events et place "as:commentable". C'est pour ça qu eje l'ai un peu réorganisé car je ne sais pas très bien utiliser le polymorphysme avec le "has_many"
Puis comme éditeur de texte j'utilise NetBeans.
L'espace je l'ai supprimé merci bien! je ne l'ai même pas remarqué mais à présent l'erreur devient:

Quote:
You have a nil object when you didn't expect it!
You might have expected an instance of ActiveRecord::Base.
The error occurred while evaluating nil.save

sur :
app/controllers/comments_controller.rb:60:in `create'
app/controllers/comments_controller.rb:59:in `create'

def create
if params[:place_id]
@place = Place.find(params[:place_id])
@comment = @place.comments.new(params[:comment])
elsif params[:event_id]
@event = Event.find(params[:event_id])
@comment = @event.comments.new(params[:comment])
end
respond_to do |format|
if @comment.save
flash[:notice] = 'comment was successfully inserted.'
if params[:place_id]
format.html { redirect_to @comment.place }
elsif params[:event_id]
format.html { redirect_to @comment.event }
end
format.xml { render :xml => @comment, :status => :created, :location => @comment }
else
format.html { render :action => "new" }
format.xml { render :xml => @comment.errors, :status => :unprocessable_entity }
end
end
end

Avec un seul paramètre ça passe! mais avec deux vues différentes (place, event) ç'est un peu compliqué!
Merci de m'avoir aider!
Au plaisir!


[ Vous devez vous connecter ou vous enregistrer pour écrire des commentaires | envoyer par email ]

Sujet: 
Enquête de code
Auteur: 
jasperiel
Date: 
Mar, 09/09/2008 - 10:36

> You have a nil object when you didn't expect it!
> You might have expected an instance of ActiveRecord::Base.
> The error occurred while evaluating nil.save

Ce n'est pas difficile d'être Sherlock Holmes, il suffit de lire les erreurs. Suivons les étapes de l'enquête :

#1) l'erreur dit que tu tentes de sauver un objet, mais qu'il n'existe pas.
#2) tu n'as qu'un seul save, à "if @comment.save" : c'est donc que @comment n'existe pas.

#3) vu le code qui précède, si tu n'as ni place_id ni event_id dans tes params, tu ne définis pas @comment.
Eurêka !

La solution ?
Déjà, en regardant le code, tu fais deux fois la même ligne dans deux endroits différents. C'est mal.
Sors-la des IFs. Ou encapsule le tout dans un autre if.

Mais franchement, ton contrôleur me semble étrange et tes besoins aussi d'ailleurs... Je suppose que si "acts as commentable" vient d'un plugin, il gère tout ça automatiquement pour toi.

Si tu n'arrives pas à nous expliquer ton code, correctement et en détail, tout en restant succinct et en allant à l'essentiel, c'est peut-être que tu ne le comprends pas toi-même.
Le souci ne vient pas de la techno ou quoi que ce soit : définis d'abord correctement ce que tu veux que ça fasse, et travaille ensuite. Tu verras, ça deviendra beaucoup plus facile.


[ Vous devez vous connecter ou vous enregistrer pour écrire des commentaires | envoyer par email ]

Nouveaux liens

Sondage
Lorsque je développe avec Ruby on Rails c'est principalement sous:
Linux
37%
Mac OS X
30%
Windows
32%
(Free|Open|Net) BSD
1%
Autre...
1%
Nombre de votes: 374

Qui est en ligne
Il y a actuellement 1 utilisateur et 54 invités en ligne.

railsfrance.org - communauté francophone des utilisateurs de Ruby on Rails
[ Hébergement et ressources techniques gracieusement fournis par la SSLL Nuxos Group ]