3

ajax 呼び出しでパーシャルをレンダリングしようとすると、ルーティング エラーが発生します。

Routing Error

No route matches {:action=>"destroy", :controller=>"relationships", :user_id=>#<User id: 2, username: .....

私のアプリ内では、プロファイル ページに表示されるユーザーのフォロワーのリストがあります。フォロワーをページ分割する代わりに、AJAX を介してサーバーからフォロワーの次のオフセットを返したいと思います。私のビューでは、これらのフォロワーのリストを表示するために既にパーシャルを使用しています (5 レコードに制限されています)。

私の目標は、AJAX 呼び出しを使用して、フォーマットされたレコードの次のオフセットでこのパーシャルを返すことです (オフセット レコードを返す機能はまだ実装していません。最初に ajax を機能させようとしています)。ブラウザでプロファイル ページにアクセスすると (そして最初の 5 つのレコードを表示すると)、パーシャルは正常に動作しますが、AJAX 呼び出しを行うとエラーが発生します。

ajax 呼び出しが発生したビューのフォームは次のとおりです。

<%= form_tag user_relationships_path(@user), method: :get, remote: true do %>
    <%= submit_tag 'load more...' %>
<% end %>

ルートは次のとおりです。

resources :users, only: [:index, :show, :new, :create, :edit, :update, :destroy] do
  resources :relationships, only: [:create, :destroy, :index]
end

relationships#indexリクエストに応答するコントローラー アクション ( ) は次のとおりです。

def index
  @user = User.find_by_username(params[:user_id])
    respond_to do |format|
      format.js { render 'load_followers' }
  end
end

load_followers.js.erb パーシャル:

$('ul#followers').append("<%= render 'users/following_items', users: @user.followers %>")

users/following_items.html.erb パーシャル:

<% users.each do |user| %>
<li class="clearfix">
    <div class="box-gravatar pull-left">
       <%= link_to user do %>
       <%= gravatar_for user, 40 %>
       <% end %>
    </div>
    <div class="pull-right">
       <%= render 'relationships/follow', user: user %>
    </div>
    <%= link_to user.username, user %>
    <div class="box-author">joined <%= join_date_for user %></div>
</li>
<% end %>

最後に、関係/follow.html.erb パーシャル:

<% unless current_user?(user) %>
   <% if current_user.following? user %>
      <p><%= link_to 'unfollow', user_relationship_path(user), method: :delete, class: "btn" %></p>
   <% else %>
      <p><%= link_to 'follow', user_relationships_path(user), method: :post, class: "btn btn-primary" %></p>
   <% end %>
<% end %>

問題のあるコードをリレーションシップ/follow.html.erb パーシャルまで追跡しました。それが削除されると、ajax 呼び出しが正常に機能し、パーシャルが .xml の末尾に追加されulます。明らかにlink_torelationships#destroyメソッドに問題があるレールに関係しています-しかし、私が試したものは何も機能していないようです。

編集:実行結果は次のrake routesとおりです。

root        /                                                posts#index
            posts_test        /posts/test(.:format)                            posts#test
                submit        /submit(.:format)                                posts#new
                signup        /signup(.:format)                                users#new
                 login        /login(.:format)                                 sessions#new
                logout DELETE /logout(.:format)                                sessions#destroy
                 about        /about(.:format)                                 about#index
                search        /search(.:format)                                search#index
              sessions POST   /sessions(.:format)                              sessions#create
           new_session GET    /sessions/new(.:format)                          sessions#new
               session DELETE /sessions/:id(.:format)                          sessions#destroy
         post_comments POST   /posts/:post_id/comments(.:format)               comments#create
            post_votes POST   /posts/:post_id/votes(.:format)                  votes#create
                 posts GET    /posts(.:format)                                 posts#index
                       POST   /posts(.:format)                                 posts#create
              new_post GET    /posts/new(.:format)                             posts#new
                  post GET    /posts/:id(.:format)                             posts#show
    user_relationships GET    /users/:user_id/relationships(.:format)          relationships#index
                       POST   /users/:user_id/relationships(.:format)          relationships#create
 new_user_relationship GET    /users/:user_id/relationships/new(.:format)      relationships#new
edit_user_relationship GET    /users/:user_id/relationships/:id/edit(.:format) relationships#edit
     user_relationship GET    /users/:user_id/relationships/:id(.:format)      relationships#show
                       PUT    /users/:user_id/relationships/:id(.:format)      relationships#update
                       DELETE /users/:user_id/relationships/:id(.:format)      relationships#destroy
                 users GET    /users(.:format)                                 users#index
                       POST   /users(.:format)                                 users#create
              new_user GET    /users/new(.:format)                             users#new
             edit_user GET    /users/:id/edit(.:format)                        users#edit
                  user GET    /users/:id(.:format)                             users#show
                       PUT    /users/:id(.:format)                             users#update
                       DELETE /users/:id(.:format)                             users#destroy
            categories GET    /categories(.:format)                            categories#index
                       POST   /categories(.:format)                            categories#create
          new_category GET    /categories/new(.:format)                        categories#new
              category GET    /categories/:id(.:format)                        categories#show
                              /:category(.:format)                             posts#index

ありがとう!

4

1 に答える 1

1

rake ルートが次の行を出力したことに注意してください。

DELETE /users/:user_id/relationships/:id(.:format)

これは、名前付きルート user_relationship がIDuserrelationshipID の両方を想定していることを意味します。理由relationshipは、 のネストされたリソースですuser

たとえば、現在、次へのリンクにこれがあります。

= link_to 'unfollow', user_relationship_path(user), method: :delete, class: "btn"

代わりに、次のようにする必要があります。

= link_to 'unfollow', user_relationship_path(user, relationship), method: :delete, class: "btn"
于 2013-01-08T18:02:12.057 に答える