我正在努力使用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表达这个?
谢谢,
答案 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