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