Ruby on Rails - 对象的DELETE和EDIT问题

时间:2017-05-14 23:34:14

标签: ruby-on-rails ruby ruby-on-rails-4

目前我正在努力创建我的第一个rails web应用程序。它应该是一个博客(遵循教程)。 我可以创建新文章,看到它们但不知何故我的DELETE和EDIT按钮不起作用(显示错误消息)。我搜索了几个小时的解决方案(这里和其他论坛),但无法弄清楚,所以我很乐意向你们寻求帮助! (提前致谢!)。 版本:Rails(4.0.0),Ruby(2.3.3p222)...如果您需要更多此处未说明的内容,请随时了解。

控制器文件

class EventsController < ApplicationController
  include EventsHelper

def index
  @events = Event.all
end

def show
   @event = Event.find(params[:id])
end

def new
   @event = Event.new

end


def create
   @event = Event.new(event_params)
   @event.save

   redirect_to event_path(@event)
end

def destroy
   @event = Event.find(params[:id])
   @event.destroy
   redirect_to events_path
end

def edit
   @event = Event.find(params[:id])
end

def update
   @event = Event.find(params[:id])
   @event.update(event_params)

   redirect_to event_path(@event)
end

private
def event_params
   params.require(:event).permit(:title, :body)
end
end

show.html.erb (我称之为EDIT&amp; DELETE)

<h1><%= @event.title %></h1>
<p><%= @event.body %></p>
<%= link_to "<< Back to Event List", events_path %>

<p> </p>
<br>

<%= link_to "edit", edit_event_path(@event) %>
<%= link_to "delete", event_path(@event), method: :delete, data: { confirm: "Are you sure?" } %>

edit.html.erb

<h1>Edit an Event</h1>

<%= form_for(@event) do |f| %>
  <ul>
<% @event.errors.full_messages.each do |error| %>
<li><%= error %></li>
<% end %>
</ul>
<p>
<%= f.label :title %><br />
<%= f.text_field :title %>
</p>
<p>
<%= f.label :body %><br />
<%= f.text_area :body %>
</p>
<p>
<%= f.submit %>
</p>
<% end %>

的routes.rb

Events::Application.routes.draw do
   root to: 'events#index'
   resources :events
end

路线输出:

    Prefix Verb   URI Pattern                Controller#Action
      root GET    /                          events#index
    events GET    /events(.:format)          events#index
           POST   /events(.:format)          events#create
 new_event GET    /events/new(.:format)      events#new
edit_event GET    /events/:id/edit(.:format) events#edit
     event GET    /events/:id(.:format)      events#show
           PATCH  /events/:id(.:format)      events#update
           PUT    /events/:id(.:format)      events#update
           DELETE /events/:id(.:format)      events#destroy

错误消息:

  

编辑后 - &gt;无法找到id = edit

的活动      

删除后 - >没有路线匹配[DELETE]&#34; / events&#34;

event.rb (在此位置 - &gt; events / app / models)

class Event < ApplicationRecord
end

` 20170513124425_create_events (事件的迁移文件)

class CreateEvents < ActiveRecord::Migration
  def change
    create_table :events do |t|
       t.string :title
       t.text :body

       t.timestamps
    end
  end
end

1 个答案:

答案 0 :(得分:0)

我刚刚重新创建了您的应用。为了让它发挥作用,我必须做一些事情。首先,确保运行rake db:migrate。

  1. 在您的索引操作中,将@event更改为@events
  2. 原因是您试图在索引页面上显示所有事件,而不仅仅是单个事件。

    1. 在您的销毁操作中,将您的redirect_to调用更改为redirect_to events_path
    2. 目前,当您删除某个事件时,您正在尝试重定向回该事件。由于事件不再存在,您将收到错误。

      1. 在show.html.erb文件中,将@events的两次出现更改为@event
      2. 您将在此页面上仅显示一个事件,而不是所有事件。

        1. 将routes.rb文件的第一行更改为Rails.application.routes.draw do
        2. 如果您进行了这些更改,您的应用应该可以使用。您还应该将event_params方法放在控制器的私有部分中。