2016-12-01 65 views
0

我已經在我的控制器中正確定義了參數。它也說No route matches {:action=>"edit", :controller=>"stories", :id=>nil} missing required keys: [:id]'StoriesController中的ActiveRecord :: RecordNotFound#編輯

但是我沒有定義它在我的控制器中的編輯方法中找到'id'?另外,我不明白爲什麼我的銷燬方法是不工作之一:/

class StoriesController < ApplicationController 
    before_action only: [:destroy, :show, :edit, :update] 


def index 
    @stories = Story.order('created_at DESC') 
end 

def new 
    @story = current_user.stories.build 
end 

def create 
    @story = current_user.stories.build(story_params) 
    if @story.save 
     flash[:success] = "Your beautiful story has been added!" 
     redirect_to root_path 
    else 
     render 'new' 
    end 
end 

def edit 
    @story = Story.find(params[:id]) 
end 

def update 
    if @story.update.attributes(story_params) 
     flash[:success] = "More knowledge, more wisdom" 
     redirect_to root_path 
    else 
     render 'edit' 
    end 
end 

def destroy 
    if @story.destroy 
     flash[:success] = "I think you should have more confidence in your storytelling" 
    else 
     flash[:error] = "Can't delete this story, sorry" 
    end 
end 

def show 
    @stories = Story.all 
end 

private 

def story_params 
    params.require(:story).permit(:name, :description) 
end 



end 

Index.html.erb:

<p id="notice"><%= notice %></p> 


    <h1>This is a list of posts</h1> 

    <table> 
     <thead> 
      <tr> 
       <th>Name</th> 
       <th>Description</th> 
       <th>User</th> 
       <th colspan="3"></th> 
      </tr> 
     </thead> 

     <tbody> 
      <% @stories.each do |story| %> 
      <tr> 
      <td><%= story.name %></td> 
      <td><%= story.description %></td> 
      <td><%= story.user.email %></td> 
      <td><%= link_to 'Show', story %></td> 
      <% if user_signed_in? %> 
      <td><%= link_to 'Edit', edit_story_path(@story) %></td> 
      <td><%= link_to 'Destroy', story, method: :delete, data: { confirm: 'Are you sure?'} %></td> 
      <% end %> 
      </tr> 
      <% end %> 

     </tbody> 
    </table> 

    <%= link_to 'New Story', new_story_path %> 

的routes.rb:

Rails.application.routes.draw do 

resources :stories 
devise_for :users 
root to: 'stories#index' 
end 

耙路線:

Prefix Verb URI Pattern     Controller#Action 
       stories GET /stories(.:format)    stories#index 
         POST /stories(.:format)    stories#create 
       new_story GET /stories/new(.:format)   stories#new 
       edit_story GET /stories/:id/edit(.:format) stories#edit 
        story GET /stories/:id(.:format)   stories#show 
         PATCH /stories/:id(.:format)   stories#update 
         PUT /stories/:id(.:format)   stories#update 
         DELETE /stories/:id(.:format)   stories#destroy 

回答

2

在你看來,

<td><%= link_to 'Edit', edit_story_path(@story) %></td>

應該是,

<td><%= link_to 'Edit', edit_story_path(story) %></td>

因爲,你的loop是,

你應該有內環路故事變量,因爲你已經|故事|裏面的參數爲| story |

所以,你的形式將是。現在

<% @stories.each do |story| %> 
     <tr> 
      <td><%= story.name %></td> 
      <td><%= story.description %></td> 
      <td><%= story.user.email %></td> 
      <td><%= link_to 'Show', story %></td> 
      <% if user_signed_in? %> 
        <td><%= link_to 'Edit', edit_story_path(@story) %></td> 
        <td><%= link_to 'Destroy', story_path(story),method: :delete,data: { confirm: 'Are you sure?' } %></td> 
      <% end %> 
     </tr> 
<% end %> 

,刪除鏈接應該是這樣的,

<td><%= link_to 'Destroy', story_path(story),method: :delete,data: { confirm: 'Are you sure?' } %></td> 
+0

謝謝。它爲什麼是故事而不是@文學? – Benjamints

+0

在你的循環中,你正在循環'故事'局部變量而不是'@故事' – Sravan

+0

現在檢查答案,它有一些解釋 – Sravan

相關問題