rails3中没有命名路由的远程form_tag

Den*_*ive 7 ruby ruby-on-rails ruby-on-rails-3

什么是使这个实际上异步发布的正确咒语?

form_tag :controller => :magic, :action => :search, :method => post, :remote => true do
Run Code Online (Sandbox Code Playgroud)

method = post和remote = true只是在url的末尾被压扁而不是实际上使它成为ajax帖子.

小智 15

我发现这样做的唯一方法是将url参数包装在url_for方法中.

form_tag url_for(:action => :create, :id => @artist.id), :remote => true do 
Run Code Online (Sandbox Code Playgroud)

但是,如果需要传递method参数,则可能需要将其包装在括号中.


ada*_*mar 10

这就是你需要的:

form_tag( { :controller => :magic, :action => :search, :method => post }, { :remote => true } ) do ....
Run Code Online (Sandbox Code Playgroud)

它的设计很糟糕,但Rails form_tag方法需要两个哈希值 - url_for选项哈希值和常规选项哈希值.这给许多Rails程序员带来了很多困惑.如果不添加描述散列边界,则所有选项都会传递给url_for(),从而破坏了:remote => true.

这将添加data-remote="true"到您的表单(与其他人提到的不显眼的javascript一起使用).从那里你需要创建适当的AJAX绑定来执行请求.

虽然你应该使用命名路由magic_search_path而不是控制器/动作参数.