我尝试使用javascript和ajax将新评论附加到现有评论列表中。我设置了我的评论#create以创建新评论,然后渲染其文本。但是如何使用ajax访问此文本?
控制器/ comments_controller.rb
def new
@comment = Comment.new
@comments = Comment.all
end
def create
@thing = Thing.find(params[:thing_id])
@comment = @thing.comments.create(comment_params)
render text: @comment.text.to_s + "".html_safe
end
我的新评论和ajax / javascript尝试的表单:
<%= form_for([@thing, @comment], remote: true) do |f| %>
<%= f.text_area :text, :placeholder => "Explain your rating..." %>
<div id="btn"><%= f.submit "Post", class: "btn", id: "postacomment" %></div>
<script type="text/javascript">
$("#postacomment").click(function() {
$.get( "<%= new_thing_comment_path(:id => @comment.id) %>", function( data ) {
$('#comments_h2').prepend( data );
});
});
</script>
<% end %>
答案 0 :(得分:1)
首先,不要试图弯曲HTTP方法来满足您的需求,而是要遵循它们。
如果你想用rails回复javascript,这很容易。在您的评论控制器上:
def new
@comment = Comment.new
@comments = Comment.all
end
def create
@thing = Thing.find(params[:thing_id])
@comment = @thing.comments.create(comment_params)
respond_to do |format|
format.html { redirect_to new_comments_path } #this is just a redirection in case JS is disabled
format.js
end
end
正如您所看到的,我们现在正在响应两种格式,在这种情况下html
和js
,这会强制您拥有相应的视图,或至少为{{1} }版本可能如下所示:
应用/视图/评论/ create.js.erb:强>
js
在上面的示例中,我假设您有一部分用于呈现评论,它应该类似于:
应用/视图/评论/ _comment.html.erb:强>
$('#comments_h2').prepend("<%= j @comment %>");
显然,您必须更新该文件以满足您的需求。
希望它有所帮助!