我正在尝试向我的应用添加一些社交功能,并关注RailsCast #163 about self-referential association,但我在删除友情方面遇到了问题。
在user#show
页面上,我有两列:@users
和@friends
。 show
中的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 %>
。
答案 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 %>