私はユーザーのコメントの表示/非表示機能を実装しています。ruby on railsにshow all comments機能を実装するにはどうしたらいいですか?
ここで議論:2 2に示すデフォルトのコメントは、その特定micropostとするときクリックされたため、総コメント数を述べたテキストとスパンを持って 1.制限:https://stackoverflow.com/a/10174194/439688
私の目的は、にしましたユーザーがそれを拡大して、そのマイクロポストのすべてのコメントを表示します。
最初に変更したのは、ユーザーに表示されるコメントの数を制限することでした。これは、「コメント」というヘルパーのメソッドを作成することで実現しました。私はコメントが属しているマイクロポストの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を少し使っていますが、ブラウザのステータスバーにコメント数が表示されないようにすることを決めました。これが私が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にクリック機能を置くことについて考えたが、どのように私は希望上記のコードの各ループにあるマイクロポストのパラメータをusers.jsに渡しますか?私はそれが可能だとは思わない。
私のコメント投稿はすべてajax経由ですが、これらのフォームを使用したので、remote => trueを追加していくつかのjsテンプレートを作成し、ajax投稿を成功させることができました。
私はこのことについて正しいことをしているのかどうかはわかりません。経験豊富なレールプログラマーの助言やアドバイスをいただければ幸いです。
種類は、別のオプションは、コメントのすべてにだけ出力され、あなたが最初に表示したくないものを隠す
でページのparamを送っていURLを入力するための場所編集ボックスを見つけることもできます。 –
スパムのクリックイベントであなたのコメントを表示しないと、p全体を更新するajax関数を呼び出すことができますartial(すべてのコメントを表示)。地元の人々を部分的に渡すこともできます。私は同じようなことをやった。あなたとまったく同じではありません。 –