0

我正在尝试向我的应用程序添加一些社交功能,并遵循RailsCast #163 about self-referential association,但我在删除友谊时遇到了问题。

user#show页面上,我有 2 列: with@users@friends. show方法来自UsersController

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>

模型和控制器一切正常,因为我已经检查了一百次。但是当我尝试打开一个页面时,我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

它看起来很糟糕,但似乎并current_user.friendships.find_all_by_friend_id(user.id).first没有friendship解决我的问题。但我确信有更简单的解决方案。

于 2013-05-25T16:51:29.563 回答
0

如果您在控制器中定义了一个实例变量(@friendship 或@user),请使用与用户或友谊相反的路由。

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