<%= posts_delete_path%>不工作

时间:2013-03-27 12:01:13

标签: ruby-on-rails path posts

我和朋友一起编程了一个网站,我的代码收到了一个错误。在我朋友的电脑上,他有相同的代码,没有任何错误。

我收到以下错误:

  

我们很抱歉,但出了点问题。

好吧,我们是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

我们知道这是删除帖子的新手方式,但我们找不到更好的解决方案。 (如果你想提出建议,我们也会很高兴)。

4 个答案:

答案 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 %>



1。查看/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 .

2。检查/layouts/application.html.erb

,查看<%= 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

谢谢你们!