Ruby on rails pjax with rails 3.1重定向到只渲染文本

Ruby on rails pjax with rails 3.1重定向到只渲染文本,ruby-on-rails,ajax,ruby-on-rails-3.1,pjax,Ruby On Rails,Ajax,Ruby On Rails 3.1,Pjax,我尝试将pjax rails gem用于a项目 当我使用gem中的重定向方法时。浏览器将响应呈现为文本。 我使用text/javascript而不是script/javascript 这是我的控制器的外观,请注意将\u重定向到\u pjax: def create @contact = Contact.new params[:contact] if @contact.save flash[:notice] = "Successfully added contact" redir

我尝试将pjax rails gem用于a项目

当我使用gem中的重定向方法时。浏览器将响应呈现为文本。 我使用text/javascript而不是script/javascript

这是我的控制器的外观,请注意将\u重定向到\u pjax:

 def create
@contact = Contact.new params[:contact]
if @contact.save
    flash[:notice] = "Successfully added contact"
    redirect_pjax_to :show,@contact
end
这是宝石

这是redirect_pjax_方法的原始实现 我想魔法就发生在这里。。。。摘自github

 private  
def redirect_pjax_to(action, url = nil)
  new_url = url_for(url ? url : { action: action })

  render js: <<-EJS
    if (!window.history || !window.history.pushState) {
      window.location.href = '#{new_url}';
    } else {
      $('[data-pjax-container]').html(#{render_to_string("#{action}.html.erb", layout: false).to_json});
      $(document).trigger('end.pjax');

      var title = $.trim($('[data-pjax-container]').find('title').remove().text());
      if (title) document.title = title;
      window.history.pushState({}, document.title, '#{new_url}');
    }
  EJS
end
我估计render:js在这里需要一个内容类型


有人有同样的问题吗?还是有更好的解决方案

您是否可以查看是否进行了AJAX调用?如果从输入元素而不是锚元素创建,我认为pjax不会被触发


我在Rails应用程序中使用PJAX,只需检查PJAX的HTTP请求头,然后执行render:layout false。工作起来很有魅力。

我可以毫无问题地使用链接。就是在pjax rails gem附带的控制器中使用redirect_pjax_to方法时。这个方法就是将_重定向到ajax/pjax的等式。