Rails:我可以向创建路径发送GET请求吗?

时间:2014-12-11 00:47:59

标签: javascript ruby-on-rails ajax ruby-on-rails-4 get

我尝试使用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 %>

1 个答案:

答案 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

正如您所看到的,我们现在正在响应两种格式,在这种情况下htmljs,这会强制您拥有相应的视图,或至少为{{1} }版本可能如下所示:

应用/视图/评论/ create.js.erb:

js

在上面的示例中,我假设您有一部分用于呈现评论,它应该类似于:

应用/视图/评论/ _comment.html.erb:

$('#comments_h2').prepend("<%= j @comment %>");

显然,您必须更新该文件以满足您的需求。

希望它有所帮助!