0

Post多くのコメントを持つモデルがあるとしましょう。すべての投稿が表示されているPosts#indexページで、ユーザーが特定の投稿にコメントを追加できるようにしたいと考えています (あまり意味がないことはわかっていますが、一般的な考え方です)。

「強引な」方法は、各post要素にフォームを添付することですが、これは悪臭を放ちます。今は考えられないより良いオプションがあると確信しているので、助けていただければ幸いです。

ありがとう、ロイ

(PS - 良い例は、ユーザーがタイムラインの各投稿にコメントできる FB ページです。それぞれの投稿にフォームを用意することではないと思います...)

4

2 に答える 2

0

「コメントを追加」ボタンを追加すると、コントローラ アクションへの ajax 呼び出しが行われ、応答としてコメント フォームの html が (文字列として) 返されます。次に、その html を投稿要素に添付します。

$(".post-element").each(function(index, post_element) {
  post_element = $(post_element);
  post_element.find(".add-comment").on("click", function(e) {
    e.preventDefault();
    $.get("/path/to/generate/form/html", function(html_response) {
      post_element.append(html_response);
    });
  });
});

「Rails の方法」を使用して、js 応答でリモート リンクを使用することもできますが、私はこの方法を好みます。

于 2014-02-17T11:09:04.053 に答える
0

次のように、JS と Ajax を使用してフォームをページに追加できます。

#config/routes.rb
resources :posts do 
    resources :comments
end

#app/assets/javascripts/application.js
$(document).on("click", "a.new_comment", function() {#
    id = $(this).attr("id");

    $.ajax({
        url: $(this).attr("href");
        success: function(data) {
             $("#" + id).append(data);
        }
    });
});

#app/views/posts/index.html.erb
<% @posts.each do |post| %>
    <%= post.title %>
    <%= link_to "Add Comment", new_post_comment_path(post.id), class: "new_comment", id: post.id %>
<% end %>

#app/controllers/comments_controller.rb
def new
    @comment = Comment.new

    respond_to do |format|
        format.html { render layout: !request.xhr? }
    end
end
于 2014-02-17T11:07:45.643 に答える