Puisque je suis un débutant, je vous serais reconnaissant si vous pouviez signaler des erreurs. Publié à des fins de mémorandum et de sortie.
Si vous n'êtes pas familiarisé avec les modèles partiels, cet article est facile à comprendre. https://pikawaka.com/rails/partial_template#collection%E3%82%AA%E3%83%97%E3%82%B7%E3%83%A7%E3%83%B3
Le code à l'origine de l'erreur.
show.html.slim (fichier appelant un modèle partiel)
= render partial: 'reviews/user_review', collection: @reviews
De mon point de vue, je m'attends à ce que chaque élément de @reviews soit affecté à l'examen de la destination de modèle partielle suivante. Cependant, j'obtiens une erreur indiquant que l'examen n'est pas défini comme indiqué ci-dessous. La valeur n'est pas passée.
ActionView::Template::Error (undefined local variable or method `review' for #<#<Class:0x00007fe1e3474948>:0x00007fe1df516738> Did you mean? @reviews):
_user_review.slim(Modèle partiel)
= "#{review.purpose}"
A l'examen, la variable locale est celle spécifiée par: partial. Dans ce cas, il est nécessaire de définir user_review, pas review, dans le modèle partiel. Ceci est affiché en toute sécurité.
show.html.slim (modèle partiel)
= "#{user_review.purpose}"
Comme mentionné dans la solution (1), la variable locale est supposée être spécifiée par: partial, mais si vous voulez utiliser la variable locale avec un nom différent, utilisez l'option as. Dans ce cas, si vous souhaitez utiliser la révision initialement définie pour les variables utilisées dans la destination de modèle partiel, spécifiez la révision avec l'option as dans le fichier de vue de l'appelant comme indiqué ci-dessous. Ceci est affiché en toute sécurité.
show.html.slim (modèle partiel)
= render partial: 'reviews/user_review', collection: @reviews, as: "review"
Dans la première manière d'écrire, celui qui porte le même nom que le modèle partiel est défini comme une variable dans le fichier de vue. Si vous souhaitez utiliser une variable qui n'est pas le nom du modèle partiel dans le modèle partiel, spécifiez-la avec l'option as.
Recommended Posts