我已经成功构建了一个包含这些表的应用程序(RAILS 4):users
,comments
和articles
并且成功了...问题是我正在创建通过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
如何使此停止重复
答案 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)%>");