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

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

form_tag :controller => :magic, :action => :search, :method => post, :remote => true do 

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

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

 form_tag url_for(:action => :create, :id => @artist.id), :remote => true do 

但是,如果需要传递method参数,则可能需要将其包含在括号中并将远程包装在远程中。

这就是你需要的:

 form_tag( { :controller => :magic, :action => :search, :method => post }, { :remote => true } ) do .... 

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

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

虽然你应该使用像magic_search_path这样的命名路由而不是控制器/动作参数。

我相信您需要使用form_remote_tag

 form_remote_tag(:url => { :controller => :magic, :action => :search }) do 

默认的http方法是post。

如果你想在form_tag上传递额外的参数,你需要将它们变成url参数的单独哈希,如下所示:

 form_tag { :controller => :magic, :action => :search }, { :method => post, :remote => true } do