0

次のコードがあります。

コメント.js.erb

alert("Alert");

アプリケーション.js

jQuery.ajaxSetup({ 
   'beforeSend': function(xhr) {xhr.setRequestHeader("Accept", "text/javascript")}
})

jQuery.fn.submitWithAjax = function() {
   this.submit(function() {
     $.post(this.action, $(this).serialize(), null, "script");         
     return false;
                         })
   return this;
};


$(document).ready(function() {
   $(".comment_form").submitWithAjax();
})

フォームを表示:

<% form_for :comment, :url => comment_task_path(tasks.id), 
                      :html => {:remote => true,
                      :class => "comment_form"} do |f|-%>
  <%= f.text_field :remark, :placeholder => "Add Comments", :rows => 2,
                   :class => 'box',
                   :style => "width: 834px; height: 40px;"%>
  <%= f.submit "Comment"%>
<% end -%>

コントローラーの方法:

def comment    
  @comment = Comment.new(params[:comment])
  @comment.user_id = @current_user.id
  @task.comments << @comment
  flash[:notice] = "thank you"
  if @comment.save
    # what code do I put here to render comment.js.erb?
  else

  end
end

commentメソッドで comment.js.erb をレンダリングする場合、どのコードを配置する必要がありますか? render toとを試しrespond toましたが、それでも実行されません。

4

3 に答える 3

0

FORMプラグインで引数として渡す必要があります。

jQuery.fn.submitWithAjax = function(elem, options, arg) {
于 2013-03-20T04:07:11.187 に答える
0

comment.js.erbを明示的にレンダリングする必要はありません。デフォルトでは、コントローラーはそのメソッドの実行後にcomment.js.erbをレンダリングします。そして、おそらく次のコードを持つことができます。

コメントアクションで

def comment
  # ...
  @comment.save
end

そしてcomment.js.erbファイルで

<% if @comment.valid? %>
  alert("Comment created successfully");
<% else %>
  alert("Something went wrong.");
<% end %>
于 2013-03-20T04:15:12.513 に答える
-1

ルートに、comments.js.erbをフェッチするためのgetリクエストを追加します

get'your_controller_name / comments'、:as =>'comments'

コントローラでcomments_pathを使用するだけです

于 2013-03-20T05:48:12.060 に答える