如何将remote_form_for的:update =>'div_id'选项从Rails 2升级到Rails 3?

Dar*_*rme 3 ajax ruby-on-rails upgrade form-for ruby-on-rails-3

我无法弄清楚如何将此代码从Rails 2升级到Rails 3:

<% remote_form_for(item, :update => 'div_id') do |f| %>
... 
Run Code Online (Sandbox Code Playgroud)

我试过这个:

<%= form_for :item, :remote => true, :url => { :controller => "items", :action => "create" }, :update => 'div_id' do |f| %>
...
Run Code Online (Sandbox Code Playgroud)

它会创建新项目,但无法更新<div id="div_id"></div>标记内的内容.似乎Rails 3不再支持:update遥控器的" "选项form_for.有什么建议吗?

cor*_*ard 9

您可以使用RJS,但也被弃用(并且有充分理由).在Rails 3+中处理此问题的简化,最佳实践方法如下(假设jQuery):

# your_view.html.erb
<div id="receiver-id"></div>

<%= form_for :some_model, :remote => true, :id => 'form-id' do |f| %>
  ...
<% end %>


# application.js (or any other .js loaded on the page)
$(function(){
  $('#form-id').bind('ajax:success', function(xhr, data, status){
    $('#receiver-id').html(data);
  });
});
Run Code Online (Sandbox Code Playgroud)

所述ajax:success钩得到由jQuery的UJS称为(又名jQuery的导轨,导轨又名-UJS)远程链路/表单处理程序.你自己看.还有很多其他回调/挂钩供您使用.如果你想让它变得更加灵活,你可以使用live而不是bind绑定,并绑定到一个指示输出sidebar去向的类(例如"sidebar"),然后所有远程链接/表单都会让他们的HTML响应转到div#sidebar.

  • @Duccio可能遇到的一个问题是Javascript驱动程序不兼容.coreyward的解决方案假设Rails javascript驱动程序是jQuery.Rails 3.0默认安装Prototype javascript驱动程序.当您尝试使用jQuery定义挂钩时,这会有问题. (3认同)