2016-04-11 11 views
4

私はレールのルーティングを理解しようとしています。私はレールガイドを読みましたが、私はまだ混乱しています。私は唯一のindex, new, edit and showアクションは左のパス名を持って上から見ることができるように作成、削除、更新アクションのためのRailsルート

    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 
          PATCH /posts/:id(.:format)     posts#update 
          PUT /posts/:id(.:format)     posts#update 
          DELETE /posts/:id(.:format)     posts#destroy 

:たとえば、私は以下のようにすべてのレールのCRUDアクションとposts_controllerを持っています。たとえば、indexアクションのパス名はpostsで、URLはposts_pathとなります。そして、私はリンクタグで以下のように使用できます。

<a href="<%= posts_path %>">here</a> 

ただし、作成、更新、破棄のアクションのパス名はありません。では、下のリンクでこの場合の作成アクションのURLを取得するにはどうすればよいですか?

<a href="<%= ..... link to create action of post controller %>">here</a>  

答えて

4

パスのいずれか、作成したいのですが、削除したい投稿のIDまたはオブジェクト渡し:フォーム内であれば

<%= link_to posts_path(@post) %> 

、と持っているがオブジェクト(@post = Post.new)は、フォームを送信するためにそのルートを使用しているという事実に基づいて、作成したいと思っている投稿を知ります。あなたがのlink_toを使用して削除したい場合は、あなたがlink_to methodmethod属性を使用する必要がmethod: :delete

2

に合格する必要があります。路線名は同じですが、ちょうど別のHTTP動詞を持つ:

<%= link_to "Update Post", post_path, method: :patch %> 
2

ので、生成されたルートのすべてのヘルパー_PATH実際にありますが、私は「、下記のルート生成の前にパス名を追加しましたLL一瞬で違いを説明する:

   posts GET /posts(.:format)      posts#index 
       posts 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 
       post PATCH /posts/:id(.:format)     posts#update 
       post PUT /posts/:id(.:format)     posts#update 
       post DELETE /posts/:id(.:format)     posts#destroy 

ですから、サーバーに対して行ったGETリクエストは、単に(GETは、任意のアクセスリンクのデフォルトであるため)指定されたパスで行うことができますが、あなたはまだ使用することができます_pathヘルパーは、アクセスするために使用しているメソッドを明示的に記述することによって、他のルートにアクセスします。たとえば:

1

私はあなたにこのことを理解するために多くの助けをすることをお勧めします。しかし、基本的にはpatch and put for rails

<%= link_to "Update Post", posts_path(@post.id), method: :patch %> 
<%= link_to "Update Post", posts_path(@post.id), method: :put %> 
<%= link_to "delete Post", posts_path(@post.id), method: :delete%> 

は、あなたのコントローラが更新をしたり、アクションを削除するために必要なものポスト知っておく必要があるため、その重要なIDを忘れてはいけない、メソッドのPUT、パッチを送ったり Routes in rails explain削除する必要があります。

関連する問題