0

アプリにソーシャル機能を追加しようとしており、RailsCast #163 about self-referential associationに従っていますが、友情の削除に問題があります。

ページには、 withと の2user#showつの列があります。メソッドは次のとおりです。@users@friendsshowUsersController

def show
  @user = User.find(params[:id])
  @users = User.all
  @friends = @user.friends
end

また、私はパーシャルを使用しています。どちらもフォルダーからレンダリング<%= render @users %>されます。これは次のとおりです。<%= render @friends %>_user.html.erbusers

<tr>
  <td>
    <%= gravatar_for user, size: 30 %>
  </td>
  <td>
    <%= user.name %>
  </td>
  <td>
    <% if current_user.friends.exists?(user) %>
        <%= link_to 'Remove friend', friendship, :method => :delete %>
    <% else %>
        <%= link_to 'Add friend', friendships_path(:friend_id => user), method: :post %>
    <% end %>
  </td>
</tr>

私はすべてを100回チェックしたので、モデルとコントローラにはすべて問題ありません。しかし、ページを開こうとするとundefined local variable or method friendship、この行からエラーが発生します<%= link_to 'Remove friend', friendship, :method => :delete %>

4

3 に答える 3

1

エラーが言うように、friendship定義されていません。friendshipの代わりに、削除するユーザーを渡す必要があります。例えば:

<%= link_to 'Remove friend', user, :method => :delete %>

また

<%= link_to 'Remove friend', friendship_path(user), :method => :delete %>

お役に立てれば!

于 2013-05-25T15:31:44.177 に答える
0

コントローラーにインスタンス変数 (@friendship または @user) が定義されている場合は、ルートのユーザーまたはフレンドシップとは対照的にそれを使用します。

<%= link_to 'Remove friend', @user, :method => :delete %>
于 2014-11-23T18:30:50.703 に答える
0

ひどいように見えますが、current_user.friendships.find_all_by_friend_id(user.id).first代わりにfriendship私の問題を解決したようです。しかし、もっと簡単な解決策があると確信しています。

于 2013-05-25T16:51:29.563 に答える