2016-12-01 25 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

相关问题