Rails 3.0迁移链接到:remote=>;真正的Ajax+;JQuery ujs不工作

Rails 3.0迁移链接到:remote=>;真正的Ajax+;JQuery ujs不工作,jquery,ruby-on-rails,ruby,ajax,Jquery,Ruby On Rails,Ruby,Ajax,我一直在从Rails 2.3.14迁移到Rails 3.0.20,我不知道为什么我不能通过链接来使用Ajax调用:remote=>true Gemfile gem "jquery-rails", "~> 1.0.19" 命令行: rails generate jquery:install --ui remove public/javascripts/prototype.js remove public/javascripts/effects.js

我一直在从Rails 2.3.14迁移到Rails 3.0.20,我不知道为什么我不能通过链接来使用Ajax调用:remote=>true

Gemfile

gem "jquery-rails", "~> 1.0.19"
命令行:

    rails generate jquery:install --ui
      remove  public/javascripts/prototype.js
      remove  public/javascripts/effects.js
      remove  public/javascripts/dragdrop.js
      remove  public/javascripts/controls.js
     copying  jQuery (1.7.1)
   identical  public/javascripts/jquery.js
   identical  public/javascripts/jquery.min.js
     copying  jQuery UI (1.8.16)
   identical  public/javascripts/jquery-ui.js
   identical  public/javascripts/jquery-ui.min.js
     copying  jQuery UJS adapter (822920)
      remove  public/javascripts/rails.js
   identical  public/javascripts/jquery_ujs.js
在标题中:

  <%= csrf_meta_tag %>
  <%= javascript_include_tag :defaults %>
编辑:使用管线:

/sponjson/review/:id(.:format) {:controller=>"sponsors", :action=>"review"}     
/sponjson/:id(.:format) {:controller=>"sponsors", :action=>"update"}   
/:controller(/:action(/:id))(.:format)

看起来您正在将JS事件附加到数据id而不是链接id。您还在图像上设置边框,这是不受支持的(列出了受支持的参数)

尝试将链接更改为以下内容:

<%= link_to review_sponjson(sponsor), remote: true, confirm: "Are you sure?", id: "review_spon_id_#{sponsor.id}" do %>
  <%= image_tag("review-icon2_16x16.png", alt: "Flag for Review") %>
<% end %>

问题是我缺少“数据类型”=>“json”。这使得控制器能够将其检测为json调用(具有适当的内容类型),并因此做出相应的响应:

<%= link_to image_tag("review-icon2_16x16.png", :border=>0),
                      {:controller=>"sponjson", :action=>"review", :id=>"#{sponsor.id}"},
                      {:remote=>true, "data-type"=>"json", :id=>"review_spon_id_#{sponsor.id}", :alt=>"Flag for Review", :title=>"Flag for Review", :confirm => "Review ...  Are you sure?" }
                      %><br/>
0),
{:controller=>“sponjson”,:action=>“review”,:id=>“#{shandor.id}”},
{:remote=>true,“数据类型”=>“json”,:id=>“审阅”\u-spon\u-id\u35;{赞助商.id},:alt=>“审阅标志”,:title=>“审阅标志”,:confirm=>“审阅…确定吗?”}
%>

这不能一字不差地工作。:confirm:语法是一个问题,所以我将其更改为“confirm:”您确定吗?“。。但最终的HTML是:
您能否澄清如何将事件附加到链接的ID而不是数据ID?我不确定我能分辨出区别。你能运行
rake routes
并快速更新你的问题吗?指定控制器、操作和id有点麻烦,可能不需要。我已经验证了它确实是正确的控制器/操作。注意到accept头没有指定json,但是在过去,当HTML被发回时,Ajax调用只会尝试对HTML进行解释,我很乐意。。因为我知道这是一个Ajax调用。以下是相关路由:/sponjson/review/:id(:format){:controller=>“赞助商”,:action=>“review”}/sponjson/:id(:format){:controller=>“赞助商”,:action=>“update”}/:controller(/:action(/:id))(:format)
<%=  raw("<script type='text/javascript'>
              $('#review_spon_id_#{sponsor.id}').bind('ajax:before', function(evt, status, data, xhr) {
                  beforeAjaxStatus('sstatus_#{sponsor.id}')
              });
              $('#review_spon_id_#{sponsor.id}').bind('ajax:complete', function(evt, status, data, xhr) {
                  completeAjaxStatusReview('sstatus_#{sponsor.id}')
              });
        </script>" )%>
    respond_to do |format|
      format.html { (head :ok) }
      format.js { (head :ok) }
      format.xml  { (head :ok) }
    end
/sponjson/review/:id(.:format) {:controller=>"sponsors", :action=>"review"}     
/sponjson/:id(.:format) {:controller=>"sponsors", :action=>"update"}   
/:controller(/:action(/:id))(.:format)
<%= link_to review_sponjson(sponsor), remote: true, confirm: "Are you sure?", id: "review_spon_id_#{sponsor.id}" do %>
  <%= image_tag("review-icon2_16x16.png", alt: "Flag for Review") %>
<% end %>
<%= link_to image_tag("review-icon2_16x16.png", :border=>0),
                      {:controller=>"sponjson", :action=>"review", :id=>"#{sponsor.id}"},
                      {:remote=>true, "data-type"=>"json", :id=>"review_spon_id_#{sponsor.id}", :alt=>"Flag for Review", :title=>"Flag for Review", :confirm => "Review ...  Are you sure?" }
                      %><br/>