【发布时间】:2011-04-29 17:26:38
【问题描述】:
在 Rails 中使链接发出 POST 请求很容易。像link_to 'Click me', some_path, :method => :post 这样的东西。这很好用......除非你需要传递额外的参数。因为没有办法从链接发出实际的 POST 请求,Rails 用 GET 请求伪造它,这意味着如果你尝试将额外的参数传递给 @987654322 @,它将它构建到查询字符串中。因此,当您将鼠标悬停时,您会看到如下所示的链接:
/some_path?foo=var&foo=bar[foo][bar]
通常这不会太糟糕,但如果你有一个需要一些嵌套参数的控制器,它会变得非常难看。
所以我的问题是,这会打扰其他人,还是只有我自己?
我能想到的唯一解决方法是将href更改为#,在附近添加一个隐藏的表单,并在链接中添加一个单击处理程序,该链接将表单序列化并在单击链接时提交。这使得链接不优雅地退化,并且对于基本上等同于审美抱怨的大量工作。但我对我的网址非常着迷。有没有更简单的方法?还是我只是疯了,应该只处理查询字符串中的参数?
【问题讨论】:
-
我猜你不使用表单有一个非常非常好的理由?
-
嗯,这是我考虑过的一个选项,只是让链接本身成为一个表单。尽管设置表单/提交按钮的样式可能非常困难(甚至不可能),这取决于它需要的外观。但真正的原因是它看起来有点矫枉过正。在这种情况下,我倾向于简单而不是风格。
-
让一个按钮看起来像一个链接并不难,但是你会在浏览器之间花费相当多的时间来调整填充等。我实际上不明白你想要实现什么。为什么你希望它是一个发布请求?
-
按钮/链接需要点击资源的创建动作,这将是一个POST请求。
-
但这不是发布请求,而是获取请求,我认为如果您需要,您应该将创建路由设为获取请求。我知道这违反了宁静的粗俗惯例,但您肯定想要做的更糟吗?
标签: javascript ruby-on-rails ajax