2017-02-05 5 views
0

レビューを編集する際に以下のエラーが表示されることがありますが、レビューは更新されますが、以下のエラーが出てきます。 Ps:私はレールの初心者です。 ReviewsController#更新中Ruby Rails:ReviewControllerのNoMethodError#update

NoMethodErrorは

私のコントローラは、以下の通りである。この

class ReviewsController < ApplicationController 
 
    before_action :authenticate_user! 
 
    before_action :set_listing 
 
    before_action :set_review, only: [:edit, :update, :destroy, :upvote, :downvote] 
 
    before_action :check_user, only: [:edit, :update, :destroy] 
 

 
    # GET /reviews 
 
    # GET /reviews.json 
 

 

 
    def index 
 
    @reviews = Review.all 
 
    end 
 

 
    # GET /reviews/1 
 
    # GET /reviews/1.json 
 
    def show 
 
    end 
 

 
    # GET /reviews/new 
 
    def new 
 
    @review = Review.new 
 
    end 
 

 
    # GET /reviews/1/edit 
 
    def edit 
 
    end 
 

 
    #Added the def upvote and downvote 
 
    def upvote 
 
    @listing = Listing.find(params[:listing_id]) 
 
    @review = Review.find(params[:id]) 
 
    @review.upvote_from current_user 
 
    redirect_to :back 
 
    end 
 

 
    def downvote 
 
    @listing = Listing.find(params[:listing_id]) 
 
    @review = Review.find(params[:id]) 
 
    @review.downvote_from current_user 
 
    redirect_to :back 
 
    end 
 

 

 
    # POST /reviews 
 
    # POST /reviews.json 
 
    def create 
 
    @review = Review.new(review_params) 
 
    @review.user_id = current_user.id 
 
    @review.listing_id = @listing.id 
 

 
    respond_to do |format| 
 
     if @review.save 
 
      format.html { redirect_to @listing, notice: 'Your review was successfully posted.' } 
 
      format.json { render :show, status: :created, location: @review } 
 
     else 
 
      format.html { render :new } 
 
      format.json { render json: @review.errors, status: :unprocessable_entity } 
 
     end 
 
     end 
 
    end 
 

 
    # PATCH/PUT /reviews/1 
 
    # PATCH/PUT /reviews/1.json 
 
    def update 
 
    respond_to do |format| 
 
     if @review.update(review_params) 
 
     format.html { redirect_to @review, notice: 'Your Review was successfully updated.' } 
 
     format.json { render :show, status: :ok, location: @review } 
 
     else 
 
     format.html { render :edit } 
 
     format.json { render json: @review.errors, status: :unprocessable_entity } 
 
     end 
 
    end 
 
    end 
 

 
    # DELETE /reviews/1 
 
    # DELETE /reviews/1.json 
 
    def destroy 
 
    @review.destroy 
 
    respond_to do |format| 
 
     format.html { redirect_to listing_path(@listing), notice: 'Your Review was successfully destroyed :(.' } 
 
     format.json { head :no_content } 
 
    end 
 
    end 
 

 
    private 
 
    # Use callbacks to share common setup or constraints between actions. 
 
    def set_review 
 
     @review = Review.find(params[:id]) 
 
    end 
 

 
    #Check user 
 

 
    def check_user 
 
     unless (@review.user == current_user) || (current_user.admin?) 
 
     redirect_to root_url, alert: "Sorry, this review belongs to someone else, you can only edit reviews you have posted." 
 
     end 
 
    end 
 

 
    #set listing 
 

 
    def set_listing 
 
     @listing = Listing.find(params[:listing_id]) 
 
    end 
 

 
    # Never trust parameters from the scary internet, only allow the white list through. 
 
    def review_params 
 
     params.require(:review).permit(:rating, :comment, :upvote, :downvote) 
 
    end 
 
    
 
end

マイroutesファイルのように見えます

Rails.application.routes.draw do 
 

 
    devise_for :users 
 

 
    resources :listings do 
 
    resources :reviews, except: [:show, :index, :upvote, :downvote] do 
 
     resources :user do 
 
     put "upvote", to: "reviews#upvote" 
 
     put "downvote", to: "reviews#downvote" 
 
     end 
 
    end 
 
    end 
 

 
    
 
    get 'pages/about' 
 

 
    get 'pages/how' 
 

 
    get 'pages/faqs' 
 

 
    get 'pages/contact' 
 

 
    get 'pages/privacy' 
 

 
    get 'pages/tos' 
 

 
    get 'pages/guidelines' 
 

 
    root 'listings#index' 
 

 
    # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html 
 
end

と私の見解ページが

<div class="row"> 
 
    <div class="col-md-3"> 
 
    <%= image_tag @listing.image_url (:medium) %> 
 

 
<p> 
 
    <h3><%= @listing.name %></h3> 
 
</p> 
 
<div class="star-rating" data-score= <%= @avg_rating %> ></div> 
 
<p class="small"><%= "#{@reviews.length} reviews" %></p> 
 

 
<address> 
 
    <strong>Address:</strong> 
 
    <%= @listing.address %><br> 
 
    <strong>Phone:</strong> 
 
    <%= @listing.phone %><br> 
 
    <strong>Email:</strong> 
 
    <%= mail_to @listing.email %> <br> 
 
    <strong>Website:</strong> 
 
    <%= link_to @listing.website, @listing %> 
 
</address> 
 
<hr> 
 
<p> 
 
    <strong>About:</strong> 
 
    <p><%= h(@listing.description).gsub(/\n/, '<br/>').html_safe %></p> 
 
</p> 
 

 
    </div> 
 
    <div class="col-md-9"> 
 
    <%= link_to "Haiya, Post a Review ", new_listing_review_path(@listing), class: "btn btn-info" %> <br><br> 
 

 
     <table class="table"> 
 
     <thead> 
 
      <tr> 
 
       <th class="col-md-3"></th> 
 
       <th class="col-md-9"></th> 
 
      </tr> 
 
      </thead> 
 
      
 
      <tbody> 
 
      <% if @reviews.blank? %> 
 
      <tr> 
 
       <p>No reviews yet. Be the first to write one!</p> 
 
      <% else %> 
 
      <% @reviews.each do |review| %> 
 
       
 
       <td> 
 
        <h4> 
 
        <%= "#{review.user.first_name.capitalize} #{review.user.last_name.capitalize[0]}." %> 
 
        </h4> 
 
        <p class = "small"><!--<%= review.created_at.strftime("%B, %d, %Y") %>--> 
 
        <%= time_ago_in_words(review.created_at) %> ago </p> 
 
       </td> 
 
       <td> 
 
        <div class="star-rating" data-score= <%= review.rating %> ></div> 
 
        <p><%= h(review.comment).gsub(/\n/, '<br/>').html_safe %></p> 
 
       
 
        
 
        <div class ="text-right"> 
 
        <p class ="small"><%= link_to listing_review_user_upvote_path(:listing, :review, :user), method: :put do %> 
 
          Poa 
 
          <%= review.get_upvotes.size %> 
 
         <% end %> | 
 

 
         <%= link_to listing_review_user_downvote_path(:listing, :review, :user), method: :put do %> 
 
          Zee 
 
          <%= review.get_upvotes.size %> 
 
         <% end %></p> 
 

 

 
        <!-- insert voting links here--> 
 
         </div> 
 

 
        <% if user_signed_in? %> 
 
        <% if (review.user == current_user) || (current_user.admin?) %> 
 

 
         <%= link_to "Edit", edit_listing_review_path(@listing, review), class: "text-left" %> 
 
         <%= link_to "Delete", listing_review_path(@listing, review), method: :delete, class: "text-left" %> 
 
    
 
        
 
        <% end %> 
 
       <% end %> 
 

 
       </td> 
 
       </tr> 
 
      <% end %> 
 
      <% end %> 
 
      </tbody> 
 

 
     </table> 
 

 
    </div> 
 
</div> 
 

 
<% if user_signed_in? && current_user.admin? %> 
 
<%= link_to 'Edit', edit_listing_path(@listing), class: "btn btn-link" %> | 
 
<% end %> 
 
<%= link_to 'Back', listings_path, class: "btn btn-link" %> 
 

 
<!--The script for star ratings. --> 
 

 
<script> 
 
    $('.star-rating').raty({ 
 
    path: 'https://s3.eu-west-2.amazonaws.com/bebuwaphotos/uploads/stars', 
 
    readOnly: true, 
 
    score: function() { 
 
     return $(this).attr('data-score'); 
 
    } 
 
    }); 
 
</script>

以下のようにここでエラー

enter image description here

はここにあるされています私は削除エラー:routes.rbをファイルにショー

enter image description here

+1

どの行番号を指していますか?その行には何がありますか? – Anthony

+0

モデルにコールバックメソッドがありますか? –

+0

エラーの詳細を表示する必要があります。 –

答えて

0

あなたはReviewsControllerであなたのupdate action@reviewにリダイレクトされていますが、それを取る、あなたのroutes.rbでそれを免除し、すべてが問題ないはずです。 except配列から:showを削除するだけです。

+0

削除しました:私のroutes.rbからの表示ですが、エラーはまだ私が上に掲示したスクリーンショットと同じです。 – samgichuru

+0

'before_action:set_review、のみ:[:edit::update、:destroy、:upvote、:downvote]'あなたは ':show'のレビューを設定していません。 –

関連する問題