我決定發佈這個作爲另一個答案,因爲第一個得到了可笑的長。
要渲染留言通知可擴展列表,你在你的 例子注意,首先收集有一些目標用戶通知的意見(不要忘了添加has_one :notification
到Comment
模型)。
comments = Comment.joins(:notification).where(:notifications => { :target_user_id => current_user.id })
注意的是,使用joins
這裏產生INNER JOIN
,所以你正確地排除沒有通知(如一些通知可能已被用戶刪除)任何評論。
接下來,您要將這些評論按他們的評論分組,以便您可以爲每個評論者創建一個可擴展列表。
@comment_groups = comments.group_by { |c| "#{c.commentable_type}#{c.commentable_id}"}
這將產生像
`{ 'Photo8' => [comment1, comment2, ...], 'Event3' => [comment1, ...], ... }`
散列,你現在可以在您的視圖中使用。
在some_page_showing_comment_notifications.html.erb
...
<ul>
<% @comment_groups.each do |group, comments| %>
<li>
<%= render 'comment_group', :comments => comments, :group => group %>
</li>
<% end %>
</ul>
...
在_comment_group.html.erb
<div>
<% case comments.length %>
<% when 1 %>
<%= comments[0].commenter.name %> commented on your <%= comment[0].commentable_type.downcase %>.
<% when 2 %>
<%= comments[0].commenter.name %> and <%= comments[1].commenter.name %> commented on your <%= comment[0].commentable_type.downcase %>.
<% when 3 %>
<%= comments[0].commenter.name %>, <%= comments[1].commenter.name %> and <%= comments[2].commenter.name %> commented on your <%= comment[0].commentable_type.downcase %>
<% else %>
<%= render 'long_list_comments', :comments => comments, :group => group %>
<% end %>
</div>
在_long_list_comments.html.erb
<div>
<%= comments[0].commenter.name %> and <%= comments.length-1 %> others commented on your <%= comments[0].commentable_type %>.
<%= button_tag "+", class: "expand-comments-button", id: "#{group}-button" %>
</div>
<%= content_tag :ul, class: "expand-comments-list", id: "#{group}-list" do %>
<li>
<% comments.each do |comment| %>
# render each comment in the same way as before
<% end %>
</li>
<% end %>
最後,它應該是一個簡單的事情,一些JavaScript添加到button.expand-comments-button
來切換display
ul.expand-comments-list
的財產。每個按鈕和列表都有基於註釋組鍵的唯一ID,因此您可以使每個按鈕展開正確的列表。
這將爲我節省很多麻煩,所以我添加了賞金作爲讚賞的象徵,但是我不能將它分配到24小時之後。 – Duopixel
@Duopixel非常感謝!讓我知道你是否需要擴展任何東西。 – cdesrosiers
謝謝。我也成功了,但沒有觀察員的一部分。我現在只需要像after_create一樣。但是,我怎樣才能展示我所給出的例子。就像發佈用戶的前幾個名字一樣,發表評論? – index