我正在为用户评论实现显示/隐藏功能。
在这里讨论:https ://stackoverflow.com/a/10174194/439688
我的目标是: 1. 将默认显示的评论限制为 2。 2. 有一个文本跨度,说明该特定微博的总评论数,当用户点击它时,它会展开并显示该微博的所有评论。我会使用 Jquery/Ajax 来隐藏、显示、前置等。
第一个更改是限制向用户显示的评论数量,我通过在我的帮助程序中创建一个名为“comments”的方法来实现这一点,在这里我传入评论所属的微博的 ID。
def get_comments(micropost_id)
Comment.limit(2).order("created_at DESC").where(:micropost_id => micropost_id)
end
现在,遍历每条评论的每个循环将只显示 2 条最近的评论。
<<% @microposts.each do |m| %>
<% if m.poster_id.nil? %>
<div class="postHolder">
<nav class="micropostOptions">
<ul class="postMenu">
<li class="deletePost"><%= link_to content_tag(:span, "Delete post"), m, :method => :delete, :confirm => "Are you sure?", :title => m.content, :class => "message_delete", :remote => true %>
</li>
<li class="disableCommenting"><%= link_to content_tag(:span, "Pause commenting"), "2" %></li>
<li class="blockCommenter"><%= link_to content_tag(:span, "Block commenter"), "3" %></li>
<li class="openInNewWindow"><%= link_to content_tag(:span, "Open in new window"), "4" %></li>
<li class="reportAbuse"><%= link_to content_tag(:span, "Report abuse"), "5" %></li>
</ul>
</nav>
<%= link_to image_tag(default_photo_for_current_user, :class => "poster_photo"), current_users_username %>
<div class="post_content">
<div class="post_container">
<div class="mainUserNameFontStyle"><%= link_to current_users_username.capitalize, current_users_username %> - <div class="post_time"> <%= time_ago_in_words(m.created_at) %> ago.</div>
</div>
<%= simple_format h(m.content) %> </div>
<div class="commentsCount">
<%= content_tag :span, pluralize(m.comments.count, 'comment'), :class => "view_all_comments" if m.comments.any? %>
</div>
<% if m.comments.any? %>
<% comments(m.id).each do |comment| %>
<div class="comment_container">
<%= link_to image_tag(default_photo_for_commenter(comment), :class => "commenter_photo"), commenter(comment.user_id).username %>
<div class="commenter_content"> <div class="userNameFontStyle"><%= link_to commenter(comment.user_id).username.capitalize, commenter(comment.user_id).username %> - <%= simple_format h(comment.content) %> </div>
</div><div class="comment_post_time"> <%= time_ago_in_words(comment.created_at) %> ago. </div>
</div>
<% end %>
<% end %>
<% if logged_in? %>
<%= form_for @comment, :remote => true do |f| %>
<%= f.hidden_field :user_id, :value => current_user.id %>
<%= f.hidden_field :micropost_id, :value => m.id %>
<%= f.text_area :content, :placeholder => 'Post a comment...', :class => "comment_box", :rows => 0, :columns => 0 %>
<div class="commentButtons">
<%= f.submit 'Post it', :class => "commentButton", :disable_with => "Post it" %>
<div class="cancelButton"> Cancel </div>
</div>
<% end %>
<% end %>
</div>
</div>
从这里开始,这让我感到困惑。我使用 link_to 稍微进一步,但后来决定我不希望在浏览器状态栏中显示评论计数的 url。这就是我改用 span 的原因。但现在做我想做的事情并不容易,因为我现在不能使用 link_to/remote => true。
我如何做到这一点,当用户单击评论计数跨度时,ajax 调用指向:
def load_comments
@load_comments = Comment.where(:micropost_id => params[:id])
respond_to do |format|
format.js { render :load_comments }
end
end
我想过在 users.js 中添加一个 click 函数,但是如何将上面代码中每个循环中的微帖子的参数传递给 users.js?我不认为这是可能的。
我所有的评论发布都是通过 ajax 完成的,但是因为我使用了这些表单,所以我很容易添加 remote => true 并创建一些 js 模板并在 ajax 发布成功的情况下做一些事情。
不确定我是否会以正确的方式解决这个问题。我会感谢更有经验的 Rails 程序员的一些帮助/建议。
亲切的问候