-2

友達と一緒にウェブサイトをプログラミングしていますが、コードで1つのエラーが発生します。私の友人のコンピューターでは、彼は同じコードを持っていて、エラーはありません。

次のエラーが発生します。

申し訳ございません。不具合が発生しました。

さて、私たちは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

4 に答える 4

0

link_to次のような表記を使用する必要があります。

<%= link_to "Delete", p, method: :delete %>

また、次のように、ユーザーがビューに削除ボタンを表示しないようにする必要があります。

<% if current_user == p.user %>
    <%= link_to "Delete", p, method: :delete %>
<% end %>

これにより、投稿の所有者にのみ削除リンクが表示されます。

また、ガネーシュが言ったように、これを回してください:

match 'posts/delete/:id', to: 'posts#destroy'
resources :posts, :only => [:create, :show]

に:

resources :posts, :only => [:create, :show, :destroy]

Railsガイド(http://guides.rubyonrails.org/routing.html)でルーティングシステムを確認し、必要なルートを確認してください。

于 2013-03-27T12:05:02.743 に答える
0
<%= link_to "Delete", p, method: :delete %>

で変更routes.rbします

リソース:投稿

于 2013-03-27T12:11:53.480 に答える
0

urリンクは問題ないように見えますが、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>
于 2013-03-27T13:13:53.717 に答える
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

みんなありがとう!

于 2013-03-28T13:03:33.577 に答える