文章用户评论和轨道中的ajax

时间:2014-03-07 15:29:09

标签: jquery ruby-on-rails ajax ruby-on-rails-4

我已经成功构建了一个包含这些表的应用程序(RAILS 4):userscommentsarticles并且成功了...问题是我正在创建通过ajax发表评论,所以当我创建第一条评论时,它会创建,但是当我创建另一条评论时,它会显示第一条评论,包含新评论和第一条评论,所有评论都是三条等等,即它复制了之前的所有评论。但是当重新加载页面时,它会显示创建的实际评论量....也许是部分或我的代码......

ceate.js.erb

$('#chat').append("<%= j render(@article.comments)%>");
$("#new_comment")[0].reset();

我的文章显示页面是

<h1><%= @article.user.username %></h1>
<%= simple_format @article.content %>
<h2>Comments</h2>
<div id="chat">
  <%= render @article.comments %>
</div>
<h3>New Comment</h3>
<%= render 'comments/form' %>

因此我的评论创建动作是:

def create
    @article = Article.find(params[:article_id])
    @comment = @article.comments.build(comment_params)
    @comment.user = current_user
    if @comment.save
      respond_to do |format|
        format.js {}
      end
    end
 end

因此我的表格

<%= form_for([@article, @article.comments.build],:remote => true) do |f| %>
  <div class="field">
    <%= f.text_area :content, rows: 8, cols: 30 %>
  </div>
  <div class="actions">
    <%= submit_tag 'Submit', :disable_with => 'commenting....', :class => 'submit' %>

  </div>
<% end %>


用户模型

  has_many :comments
  has_many :articles

评论模型

  belongs_to :user
  belongs_to :article
文章模型 has_many:评论

  belongs_to :user
  validates :user_id, :presence => true
  has_many :users, ->  {uniq}, through: :comments

如何使此停止重复

2 个答案:

答案 0 :(得分:1)

create.js.erb

$('#chat').append("<%= j render(@article.comments)%>");

应该是:

$('#chat').html("<%= j render(@article.comments)%>");

否则,您在每条评论上附加所有评论都会创建。

答案 1 :(得分:1)

我认为你的问题只是你将评论的完整列表附加到评论部分,当你应该a)用评论列表替换评论部分或b)只是添加新评论到评论部分顶部/底部。

b)效率更高,但除非效率已经成为一个问题,否则我将永远只是重新渲染列表,它更简单,更可靠。

尝试将create.js中的第一行更改为

$('#chat').html("<%= j render(@article.comments)%>");