未定义的局部变量或方法友谊

时间:2013-05-25 15:27:47

标签: ruby-on-rails

我正在尝试向我的应用添加一些社交功能,并关注RailsCast #163 about self-referential association,但我在删除友情方面遇到了问题。

user#show页面上,我有两列:@users@friendsshow中的UsersController方法是:

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

此外,我正在使用<%= render @users %><%= render @friends %>部分,它们都会从_user.html.erb文件夹中呈现users,具体如下:

<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 %>

3 个答案:

答案 0 :(得分:1)

如错误所述,friendship未定义。您需要传递而不是要删除的用户friendship。例如:

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

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

希望这有帮助!

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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