要件
1.入力者の名称が表示されるようにする。
2.入力者が、新規入力と、削除ができるようにする。
3.コメントの入力、削除に、画面遷移・再読込を不要にする。
4.コメントの入力者のアイコンが表示されるようにする。
今日はAjaxを織り交ぜ、削除機能の実装を行う。
1.controller:commentにdestroyメソッドを追加
def destroy
@comment = Comment.find(params[:id])
@comment.destroy
render json: { comment: @comment }
end
renderがポイント。viewでどのコメント行を削除するかのkeyとなる。
2.view:photo.showを改修1
<h2>コメント</h2>
<ul>
<% if @photo.comments.any? %>
<% @bsc.comments.each do |comment| %>
<li id="comment_<%= comment.id %>"> (注意)
<%= image_tag comment.user.avatar_url(:thumb).to_s if comment.user.avatar? %>
<%= comment.body %> (by <%= comment.user.disp_name %>)
<%= link_to image_tag("ico_xmark3c15.gif"), [comment.photo, comment], :confirm => 'Sure?',
:method => :delete,
:remote => true %>
</li>
<% end %>
<% else %>
<li>no comment yet.</li>
<% end %>
</ul>
こう書いていて大いに疑問を感じたことがあって(BRAHMAN聞きながらだから余計)、世の中のSampleを有りがたく参考にしながら(ほんとうに有難い)書いていると、どれがモデル名なのか、変数なのか、何なのかマヨことが良くある。もしかするとこれがrubyのrailsのStandardなのかもしれない。まだ、どうも引っかかる。あ、開発時の命名規則とか決めていないからか、そうだそうだ(反省)
愚痴はどうでもよく、viewの開発ポイントは、画像をlink_to_image_tagで入れたところ。バッテン画像。
3.view:photo.showを改修2
viewの下部に以下を追加
<script>
$(function() {
$('a[data-method="delete"]').live('ajax:success', function(e, data, status, xhr) {
$('#comment_'+data.comment.id).fadeOut("slow");
});
});
</script>
酔いどれロートルの私はここでハマった。上記(注意)がすっぽ抜け、削除してもエンティティからレコードは消えるが、一向に画面は微動たりしない。たまにブラウザのソース表示で確認していくしかないなぁと感じた一瞬。1時間浪費。
さて検証。まず2つのコメントを準備。バッテンアイコンも表示されている。
2つ目のバッテンを押すと、Dialogが表示。OKを押す。
すーっとフェードアウトして消えていく。やった。
0 件のコメント:
コメントを投稿