我有一个列表模型(允许评论),用户可以喜欢(竖起大拇指)或不喜欢(大拇指向下)列表。它目前有效,但我想迭代特定列表的喜欢,如果有任何类似的user_id listing.likes.user_id
匹配当前用户ID current_user.id
,那么删除表单(用户可以添加原因)为什么他们喜欢上市)
<%= form_for([@listing, @listing.likes.build]) do |f| %>
<%= f.hidden_field :user_id, :value => current_user.id %>
<%= f.text_field :body %>
<%= f.submit %>
<% end %>
我有一半在那里检查当前是否喜欢user_id与当前用户ID匹配,如果是,则提供删除(删除/不同)之类的链接。
<% if current_user.id == like.user_id %>
<%= link_to '[ Delete Like ]', [like.listing, like],
method: :delete,
data: { confirm: 'Are you sure?' } %>
<% end %>
如果用户已经创建了类似/如果用户的ID与为特定列表创建的类似user_id
匹配,那么如何使用代码删除相似的表单(这样的话?)
<% if current_user.id == listing.likes.any.user_id %>
<% else %>
<%= form_for([@listing, @listing.likes.build]) do |f| %>
<%= f.hidden_field :user_id, :value => current_user.id %>
<%= f.text_field :body %>
<%= f.submit %>
<% end %>
<% end %>
答案 0 :(得分:0)
找到了部分解决方案,但它会阻止用户在评论后发表评论,而不是每个评论发表评论。
<% @listing.likes.each do |like| %>
<% if current_user.id == like.user_id %>
<% else %>
<%= form_for([@listing, @listing.likes.build]) do |f| %>
<%= f.hidden_field :user_id, :value => current_user.id %>
<%= f.text_field :body %>
<%= f.submit %>
<% end %>
<% end %>
<% end %>
答案 1 :(得分:0)
我认为你对any
方法有正确的想法,但没有正确使用它。 any
可以接受您可以进行user_id
比较的区块,如下所示:
<% if listing.likes.any{|like| like.user_id == current_user.id } %>
在这种情况下,any
将在块中的条件评估为真的瞬间返回true。
让我知道这是否有效。
旁注
如果我的方法适合您,您可以通过将该检查作为辅助方法移至Listing
模型来进一步清理视图代码。像这样:
class Listing < ActiveRecord::Base
# ... other stuff
def has_comment_from?(target_user)
likes.any{|like| like.user_id == target_user.id }
end
end
然后你可以简单地从视图中调用它:
<% if listing.has_comment_from? current_user %>