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

时间:2010-08-17 22:40:20

标签: ruby-on-rails ruby ruby-on-rails-3

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

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

method = post和remote = true只是在网址末尾被压扁而不是实际上将其作为ajax帖子。

3 个答案:

答案 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
相关问题