Rails 3.0迁移链接到:remote=>;真正的Ajax+;JQuery ujs不工作
我一直在从Rails 2.3.14迁移到Rails 3.0.20,我不知道为什么我不能通过链接来使用Ajax调用:remote=>true GemfileRails 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
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/>