2014-02-06 98 views
0

我有一個列表模型(允許評論),用戶可以喜歡(豎起大拇指)或不喜歡(拇指向下)列表。它目前的作品,但我想重複喜歡一個特定的列表,如果任何類似的user_id listing.likes.user_id匹配當前用戶ID current_user.id然後刪除表單喜歡(用戶可以添加一個他們喜歡上市的原因)將用戶限制爲1喜歡/不喜歡每篇文章

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

我認爲你對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 %> 
0

找到了部分解決方案,但它阻止用戶在1條評論之後發表評論,而不是1條評論。

<% @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 %> 
+0

不是縮進的粉絲呢? ;-) –

+0

更好嗎?我正在使用的編輯器不執行縮進和(對於編程來說仍然是新的),不確定是否有針對所有語言的集合標準,或者每種語言有不同的縮進? (使用其他可以選擇「設置縮進」但列出10多種語言的文本編輯器) – Aluxzi

+1

@Aluxzi爲您做了小縮進修復。似乎SO不喜歡在格式化時混合標籤和空格字符。只是好奇,我認爲空的'if'塊是你提到的鏈接去的地方(爲簡潔起見,你只是省略了),對嗎? –