2012年12月12日水曜日

rails:comment機能を実装:削除機能

comment機能の実装の続き。私のビジネスは残業必須で、rails開発は睡眠時間を削ることに。でも楽しい。


要件
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 件のコメント:

コメントを投稿