目前我正在努力创建我的第一个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
答案 0 :(得分:0)
我刚刚重新创建了您的应用。为了让它发挥作用,我必须做一些事情。首先,确保运行rake db:migrate。
@event
更改为@events
。原因是您试图在索引页面上显示所有事件,而不仅仅是单个事件。
redirect_to events_path
。目前,当您删除某个事件时,您正在尝试重定向回该事件。由于事件不再存在,您将收到错误。
@events
的两次出现更改为@event
。您将在此页面上仅显示一个事件,而不是所有事件。
Rails.application.routes.draw do
如果您进行了这些更改,您的应用应该可以使用。您还应该将event_params方法放在控制器的私有部分中。