怎么说在Rails3中调用这个Ajax?

时间:2011-10-25 15:34:29

标签: ruby-on-rails ajax ruby-on-rails-3

我正在努力使用Rails 2中的Ajax调用:

   def add_task_link(name)
      link_to_function name do |page|
         page.insert_html :bottom, :tasks, :partial => 'task', :object => Task.new
      end
   end

如何用Rails 3表达这个?

谢谢,

2 个答案:

答案 0 :(得分:1)

我想你可能想要link_to:remote =>相反,真的。 link_to_function旨在接受它放在onclick属性中的一串javascript代码。因此,不要使用辅助方法,而是使用类似

的方法
<%= link_to 'My Link', new_task_path, :remote => true %>

然后在您的新操作中,您需要添加.js响应阻止。

def new
  @task = Task.new
  respond_to do |format|
    format.html
    format.js { render :layout => false } # add this line
  end
end

然后在名为new.js.erb的app / views / tasks下创建一个文件,并添加:

$('body').append('<%= escape_javascript(render :partial => "form", :locals => { :task => @task }) %>');

如果设置了部分表单(您可以将其用于new.html.erb和edit.html.erb文件),这应该可以正常工作。从这个示例存储库中获取一些示例:https://github.com/nu7hatch/rails3-ujs-example/blob/master/我不得不承认,我在Rails中没有做很多link_to远程编码示例。我做的大多数ajax调用都使用JSON响应。所以我在资产管道下编写了js代码。

答案 1 :(得分:0)

在Github的这个项目中有一些提示:https://github.com/ryanb/complex-form-examples

   def link_to_add_fields(name, f, association)
     new_object = f.object.class.reflect_on_association(association).klass.new
     fields = f.fields_for(association, new_object, :child_index => "new_#{association}") do |builder|
         render(association.to_s.singularize + "_fields", :f => builder)
      end
      link_to_function(name, "add_fields(this, \"#{association}\", \"#{escape_javascript(fields)}\")")
    end

此外,使用accepts_nested_attributes_for非常重要,如

所示

https://github.com/ryanb/complex-form-examples/blob/master/app/models/survey.rb