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