使这个实际上异步发布的正确咒语是什么?
form_tag :controller => :magic, :action => :search, :method => post, :remote => true do
method = post和remote = true只是在网址末尾被压扁而不是实际上将其作为ajax帖子。
答案 0 :(得分:15)
我发现这样做的唯一方法是将url参数包装在url_for方法中。
form_tag url_for(:action => :create, :id => @artist.id), :remote => true do
但是,如果您需要传递method
参数,则可能需要将其包装在括号中。
答案 1 :(得分:10)
以下是您的需求:
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
这样的命名路由而不是控制器/动作参数。
答案 2 :(得分:0)
我认为您需要使用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