Aucun itinéraire correspond - manque des touches[:id]
Fond
Je me suis mise en œuvre d'une fonctionnalité dans mon application qui permet aux utilisateurs de noter et commenter les photos.
Mon problème vient de l'imbrication des Examens des ressources à l'intérieur des Photos de ressources, plus précisément dans mon commentaire#fonction d'Édition. Le message d'erreur spécifiquement déclare manque des touches: [:id]
Message D'Erreur
ActionController::URLGenerationError in Reviews#Edit
No route matches {:action=>"show", :controller=>"reviews", :format=>nil, :picture_id=>#<Review id: 4, username: "DarkMouse", body: "Updating review", picture_id: 11, created_at: "2014-08-14 03:26:52", updated_at: "2014-08-14 03:55:29">, :id=>nil} missing required keys: [:id]
Undefined method 'reviews_path' for #<#<Class:0x45c1b00>:0x39ae810>
Extracted source (Around line #7):
4 <div class = 'center'>
5 <div class = 'center'>
6
7 <% form_for [:picture, @review] do |f| %>
8
9 <p>
10 <%= f.label :username, :class => 'marker' %><br />
J'ai cherché des réponses sur la Pile Overflow.com(Mes références sont données en bas) et a conseillé de le faire.
<td><%= link_to 'Edit', edit_picture_review_path(@picture, review) %></td>
Chaque solution unique, je suis tombé sur dit pour modifier le chemin d'accès à inclure l'objet spécifique. Si ce est une indication, il semble comme il devrait vraiment travailler.
Paramètres
{"picture_id"=>"11",
"id"=>"4"}
Aussi, mon path_url est comme suit
http://localhost:3000/pictures/11/reviews/4/edit
Le chemin de l'URL ressemble à mes itinéraires définis ainsi
edit_picture_review_path GET /pictures/:picture_id/reviews/:id/edit(.:format) reviews#edit
Je suis à l'aide d'un Posts/Commentaires modèle de relation pour une Photos/avis de relation.
Modèles
class Review < ActiveRecord::Base
belongs_to :picture
end
class Picture < ActiveRecord::Base
has_many :reviews
end
Ci-dessus, j'ai établi une relation entre les photos et les commentaires.
Routes
favorite_picture_path PUT /pictures/:id/favorite(.:format) pictures#favorite
picture_reviews_pat GET /pictures/:picture_id/reviews(.:format) reviews#index
POST /pictures/:picture_id/reviews(.:format) reviews#create
new_picture_review_path GET /pictures/:picture_id/reviews/new(.:format) reviews#new
edit_picture_review_path GET /pictures/:picture_id/reviews/:id/edit(.:format) reviews#edit
pictures_review_path GET /pictures/:picture_id/reviews/:id(.:format) reviews#show
PATCH /pictures/:picture_id/reviews/:id(.:format) reviews#update
PUT /pictures/:picture_id/reviews/:id(.:format) reviews#update
DELETE /pictures/:picture_id/reviews/:id(.:format) reviews#destroy
ReviewsController
class ReviewsController < ApplicationController
before_action :set_review, only: [:show, :edit, :update, :destroy]
before_filter :find_picture, only: [:index, :create, :edit, :update, :destroy]
def edit
@review = Review.find(params[:id])
end
def update
@review = Review.find(params[:id])
if @review.update_attributes(params[:review])
flash[:notice] = "Review updated"
redirect_to @picture
else
flash[:error] = "There was an error updating your review"
redirect_to @picture
end
end
private
def set_review
@review = Review.find(params[:id])
end
def find_picture
@picture = Picture.find(params[:picture_id])
end
def review_params
params.require(:review).permit(:username, :body, :post_id)
end
end
Le problème pourrait se trouver avec le review_params
post_id #should be
review_id
Examens#Index Page
<h3>Reviews for <%= "#{@picture.title}" %></h3>
<table class = "reviews-table">
<thead>
<tr>
<th>Review</th>
<th>Username</th>
<th><th>
</tr>
</thead>
<tbody>
<% @picture.reviews.each do |review| %>
<tr>
<td><%= review.body %></td>
<td><%= review.username %></td>
<td><%= link_to 'Edit', edit_picture_review_path(@picture, review) %></td>
</tr>
<% end %>
<div class = 'center'>
<p><%= link_to 'New Review', new_reviews_path(@review), :class => "btn btn-info" %></p>
<p><%= link_to 'Back', picture_path, :class => "btn btn-info" %></p>
</div>
Examens#Modifier La Page
<h3>Edit Review</h3>
<div class = 'center'>
<div class = 'center'>
<%= form_for [:picture, @review] do |f| %>
<p>
<%= f.label :username, :class => 'marker' %><br />
<%= f.text_field :username %>
</p>
<p>
<%= f.label :body, "Review", :class => 'marker' %><br />
<%= f.text_area :body, :rows => "10", :cols => "10" %>
</p>
<p>
<%= f.submit "Submit Review", :class => 'btn btn-success' %>
</p>
<% end %>
routes.rb
resources :pictures do
put :favorite, on: :member
resources :reviews
end
Comme vous pouvez le voir ci-dessus, je suis en utilisant des ressources.
Références et Liens Externes
Manque des touches de
ActionController::UrlGenerationError manque des touches: [:id]
Aucun itinéraire correspond manque des touches: [:id]
ActionController::UrlGenerationError: manque des touches: [:id]
Pas de routes matches "manque des touches: [:id, :_id]"
Tous les liens ci-dessus, et de plus en plus consulté. Chaque solution a essayé mais aucun n'a fonctionné. C'est pourquoi je suis à la réouverture de cette question. J'espère que ce guide peut servir de modèle pour résoudre ce problème aller de l'avant.
Merci à l'avance. Ce n'est pas une question facile. Bonne chance.
OriginalL'auteur Darkmouse | 2014-08-14
Vous devez vous connecter pour publier un commentaire.
Quelques observations, en improvisant.
Votre message d'erreur indique que
No route matches {:action=>"show", :controller=>"reviews"
.Votre ReviewsController ne semble pas être à côté de la fin de l'action, mais cela ne semble pas pertinente.
Alors que nous laisse avec la ligne incriminée:
<% form_for [:picture, @review] do |f| %>
Noter que votre erreur n'est pas avec cette ligne:
<td><%= link_to 'Edit', edit_picture_review_path(@picture, review) %></td>
À la recherche à la docs, sous axée sur les Ressources de style, nous pouvons voir les instructions suivantes:
Pour vous, cela se traduit par:
<% form_for [@picture, @review] do |f| %>
La même page conseille également:
Bien que vous ne devriez pas en avoir besoin, pour vous, cela se traduit par quelque chose comme:
<% form_for [@picture, @review], url: edit_picture_review_path(@picture, @review) do |f| %>
OriginalL'auteur Brad Werth