に関連するオブジェクトを盗んする方法私のアプリケーションはMicropostモデルとコメントモデルを有しています。 私は/隠し、さわやかなコメントを示すためMicropost部分のリンクで導入:メモリから破棄オブジェクト
<li id="micropost-<%= micropost.id %>">
<span class="user"><%= link_to micropost.user.name, micropost.user %></span>
<span class="content">
<%= micropost.content %>
<%= image_tag micropost.picture.url if micropost.picture? %>
</span>
<% if micropost.comments.any? %>
~ <%= link_to "Show/hide comments", "#", class: "comments-link", remote: true %>
~ <%= link_to "Refresh comments", fetch_comments_path(micropost), remote: true %>
<% end %>
<% if logged_in? && (current_user == micropost.user || current_user.friend?(micropost.user)) %>
<div class="comment-section">
<%= form_for(current_user.comments.build, remote: true) do |f| %>
...
<% end %>
</div>
<% end %>
<div class="comments-section">
<% if micropost.comments.any? %>
<ol id="comments_micropost-<%= micropost.id %>">
<% micropost.comments.each do |comment| %>
<%= render comment %>
<% end %>
</ol>
<% end %>
</div>
</li>
このリンクは最初のコメントを作成し、micropostがコメントを持っている場合はロードされた後のページに追加されます。
はしかし、そこに一つだけのコメントがあり、それが削除された場合には、彼らは役に立たないので、私はコメントコントローラの破壊作用を介してのAjaxでそれらを削除したいと思います。
私はこれを実現するために私のトラブルを抱えています。
主な問題は、破棄されるコメントを使ってマイクロポストを参照することができないことです。 コメントが破壊されると任意の@micropost = @comment.micropost
協会がnilオブジェクトを返すでしょう:respond_to
ブロックをリフレッシュすることなく、format.html
のために動作しません後create.js.erb
の内側に、私は@comment.destroy
を移動if @micropost.comments.nil? remove links
条件
を使用することはできません、したがって
def destroy
@comment = current_user.comments.find_by(id: params[:id])
@micropost = @comment.micropost
@comment.destroy
respond_to do |format|
format.html do
flash[:success] = "Comment deleted"
redirect_to request.referrer || root_url
end
format.js
end
end
をページ。 それが働いた場合、それがformat.js
で使用されないので、私は、format.html
ブロック内@comment.destroy
を移動することはできませんcreate.js.erb
の条件@micropost.comments.count == 1 remove links
場合、私は使用することができます。 どのようなソリューションを使用できますか?
部分のコメントで削除リンクは次のとおりです。私は書くことができるように
<%= link_to "delete", comment, method: :delete, micropost_id: micropost.id, remote: true %>
:
<%= link_to "delete", comment, method: :delete, remote: true %>
はそれのような、link_to
にmicropost.id
に等しいのparams値を渡すことができます破壊行為で:
@micropost = Micropost.find(params[:micropost_id])
?あなたがオブジェクトを破棄するとき
':
今、あなたは別のアクションを取るか、このような親のポストにリダイレクトする
@micropost_id
を使用することができます'@ comment.micropost.id'として定義されているので、 '@ comment'を破棄した後に取り出すことができます。これはnilです。 – Asarluhi@micropost_idは、あなたのajaxコールセッションが残るまで残ります。 create.js.erbで使用できます。ページを更新した後は使用できません。あなたは問題を数語で説明することができます。あなたは達成するために何をしたいですか? –
Micropost.find(@micropost_id).comments.anyが指定されていない限り、<%を使用したいと思いますか? %> 'create.js.erb内のリンクを削除する – Asarluhi