Je fais ce que je suppose être un problème simple mais je ne peux pas le comprendre. J'essaye de mettre à jour un attribut dans un modèle quand un autre est créé.Rubis sur rails. Passer des params de la vue au contrôleur
À mon avis:
<%= link_to 'Click here to rate this user', new_user_review_path(:user_id => request.user.id, :gigid => request.gig.id), remote: true %>
qui passe params :gigid
et :user_id
que mon contrôleur:
def new
@review = Review.new
@gig = Gig.find(params[:gigid])
end
def create
@review = @user.reviews.new review_params
@review.reviewed_id = current_user.id
if @review.save
@gig.update(reviewed: true)
respond_to do |format|
format.html {redirect_to session.delete(:return_to), flash[:notice] = "Thankyou for your rating!"}
format.js
end
else
render 'new'
end
end
Mais je reçois undefined method 'update'for nil:NilCLass:
Je sais que les params passent et le 'Gig' peut être mis à jour ATED comme:
def new
@review = Review.new
Gig.find(params[:gigid]).update(reviewed: true)
end
met à jour l'attribut bien, mais quand je clique sur « nouvel » pas lorsque l'examen est effectivement créée.
Ajout:
def create
@review = @user.reviews.new review_params
@review.reviewed_id = current_user.id
if @review.save
Gig.find(params[:gigid]).update(reviewed: true)
etc etc etc
me donne la même undefined method 'update'for nil:NilCLass:
J'ai essayé avec find_by_id
au lieu de find
qui ne fait aucune différence.
EDIT:
def create
@gig = Gig.find params[:gigid]
@review = @user.reviews.new review_params
@review.reviewed_id = current_user.id
if @review.save
@gig.update(reviewed: true)
etc etc etc
ne fonctionne pas non plus. Je n'ai pas d'erreur, mais l'identifiant du concert est toujours 'nul'.
Les paramètres passent à l'action "Nouveau" mais pas à l'action "Créer". Je pense que ça devrait être très facile mais je ne le vois pas pour le moment.
Vous obtenez cette erreur beacuse Gig.find (params [: gigid]) renvoie Nil. Assurez-vous que params [: gigid] est un identifiant valide qui existe dans la base de données afin qu'il puisse le trouver. Devrait probablement faire une vérification qui n'est pas nulle avant d'essayer d'appeler la méthode de mise à jour aussi. – Klante
Je suis confus, alors. Votre «nouvelle» action ne rend pas un modèle ou quoi que ce soit? Comment appelez-vous 'créer'? Votre link_to génère un lien vers votre "nouvelle" action. –
Je le fais par ajax, mais sans javascript, je suis redirigé vers la nouvelle page de révision qui rend un formulaire partiel. Je remplis ensuite et enregistre/crée la revue. Je souhaite que l'attribut soit mis à jour lors de la sauvegarde/création. –