我和朋友一起编程了一个网站,我的代码收到了一个错误。在我朋友的电脑上,他有相同的代码,没有任何错误。
我收到以下错误:
我们很抱歉,但出了点问题。
好吧,我们是Rails中的新手,当我尝试加载帖子页面时出现此错误。我们认为错误在于删除帖子,因为如果我们评论" posts_delete_path"的行,一切正常。要删除帖子,我们正在使用:
show.hmtl.erb:
<% @hashtag.posts.each do |p| %>
<li>Posted by: <%= p.user.name %></li>
<li>Content:</li>
<li><%= p.content %></li>
<li><a href="<%= posts_delete_path %>/<%= p.id %>" >Delete</a></li>
<% end %>
路线:
match '/signout', to: 'sessions#destroy'
match 'posts/delete/:id', to: 'posts#destroy'
resources :posts, :only => [:create, :show]
发布控制器:
def destroy
@post = Post.find(params[:id])
if current_user.id == @post.user_id
@post.destroy
end
end
----编辑---- 耙路线:
posts GET /posts(.:format) posts#index
POST /posts(.:format) posts#create
new_post GET /posts/new(.:format) posts#new
edit_post GET /posts/:id/edit(.:format) posts#edit
post GET /posts/:id(.:format) posts#show
PUT /posts/:id(.:format) posts#update
DELETE /posts/:id(.:format) posts#destroy
我们知道这是删除帖子的新手方式,但我们找不到更好的解决方案。 (如果你想提出建议,我们也会很高兴)。
答案 0 :(得分:0)
您应该使用link_to
这样的符号:
<%= link_to "Delete", p, method: :delete %>
此外,您应该尝试阻止用户查看视图中的删除按钮,例如:
<% if current_user == p.user %>
<%= link_to "Delete", p, method: :delete %>
<% end %>
这只会向帖子的所有者显示删除链接。
也像Ganesh说的那样,转过来:
match 'posts/delete/:id', to: 'posts#destroy'
resources :posts, :only => [:create, :show]
为:
resources :posts, :only => [:create, :show, :destroy]
在导轨指南中查看路由系统:http://guides.rubyonrails.org/routing.html,并查看您需要的路线。
答案 1 :(得分:0)
<%= link_to "Delete", p, method: :delete %>
并使用
修改routes.rb
资源:帖子
答案 2 :(得分:0)
看起来你的链接很好,但听起来你没有包含你的js ,这就是为什么当你点击删除它会将你重定向到显示页面。
<%= link_to 'Destroy', product, :confirm => 'Are you sure?', :method => :delete %>
/assets/application.js
//= require jquery
和
//= require jquery_ujs
在application.js中添加此代码
// This is a manifest file that'll be compiled into application.js, which will include all the files
// listed below.
//
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
// or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
//
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
// the compiled file.
//
// WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
// GO AFTER THE REQUIRES BELOW.
//
//= require jquery
//= require jquery_ujs
//= require_tree .
<%= javascript_include_tag "application"%>
<head>
<title>My awesome app</title>
<%= stylesheet_link_tag "application" %>
<%= javascript_include_tag "application"%>
<%= csrf_meta_tag %>
</head>
答案 3 :(得分:0)
感谢所有尝试过帮助我的人。现在我解决了我的问题,但通过其他方式。
我的工作是:
在视图中:
<% if current_user.id == p.user_id %>
<%= button_to "Delete", { :controller => :posts, :action => 'destroy', :id => p.id }, :method => :delete %>
<% end %>
在控制器中:
def destroy
@post = Post.find(params[:id])
#if current_user.id == @post.user_id
@post.destroy
end
end
在路线中:
resources :posts
谢谢你们!