2 votes

NoMethodError dans les vues d'une application Rails

Je suis un tutoriel dans lequel je dois créer une sorte de site d'annuaire. Comme il est nécessaire d'avoir une page où un utilisateur peut écrire une critique, je crée les vues et le formulaire pour les critiques. Les étapes que j'ai suivies sont les suivantes :

1 - Création d'un dossier reviews dans app/views/reviews :

2 - Créez à l'intérieur de ce dossier un partiel appelé _forms.html.erb pour les revues

 <%= simple_form_for(@review) do |f| %>
  <%= f.error_notification %>

  <div class="form-inputs">
    <%= f.input :content, required: true %>
    <%= f.hidden_field :place_id, required: true, value: @place_id %>
  </div>

  <div class="form-actions">
    <%= f.button :submit %>
  </div>
 <% end %>

3 - Pour rendre l'évaluation/le formulaire sur les lieux/spectacles que j'ajoute :

<div class="col-md-9">
    <h3>Reviews by People</h3>
    <%= render 'reviews/form' %>
  </div>

J'ai obtenu une erreur en essayant de rendre le formulaire. J'ai donc utilisé PlacesController et j'ai ajouté la ligne de code suivante à la méthode show :

  # GET /places/1
  # GET /places/1.json
  def show
    @review = Review.new 
  end

Mon fichier routes.rb contient les routes pour les revues. L'erreur que j'ai obtenue est la suivante :

NoMethodError in Places#show
Showing C:/workinrails/myyelpapp/app/views/reviews/_form.html.erb where line #5 raised:
undefined method `content' for #<Review:0x9200a30>
Trace of template inclusion: app/views/places/show.html.erb

app/views/reviews/_form.html.erb:5:in `block in _app_views_reviews__form_html_erb___988880813_76383660'
app/views/reviews/_form.html.erb:1:in `_app_views_reviews__form_html_erb___988880813_76383660'
app/views/places/show.html.erb:13:in `_app_views_places_show_html_erb__530556826_71913768'

Je peux fournir des extraits de code pour une meilleure compréhension.

1voto

neo Points 2742

Ajouter une nouvelle colonne appelée contenu sur le tableau des révisions

bundle exec rails g migration add_content_to_reviews content:string

bundle exec rake db:migrate

0voto

prasanthrubyist Points 346

Vous devez ajouter un nom de colonne spécifique dans votre table

rails g migration AddColumnNameToTableName column_name:datatype

puis

rails db:migrate

Note : - Vous devez connaître la différence entre form_for et form_tag,

Form_for

Vous utilisez ici form_for, donc vous devez spécifier uniquement le nom de la colonne que vous avez déjà créé dans la base de données.

Form_tag

form_tag vous n'avez pas besoin de spécifier le nom de la colonne requise, vous pouvez utiliser n'importe quel nom, vous obtiendrez les paramètres de cette valeur dans votre contrôleur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X