1

这个问题可能有一个明显的答案......但我不确定在哪里看。

出于某种原因,rails 在某些重定向上将空查询字符串附加到我的 URL。我有一个用户“仪表板”页面,他们可以在其中单击一个按钮来创建一个新的“foo”。

当我单击按钮转到此路径时,URL 显示为:“localhost/foo/new?”

我不知道这个幻像查询参数是从哪里来的......我什至不知道这是否是一个大问题,但出于某种原因,我觉得它可能会在缓存或 SEO 端伤害我。有没有人有一些关于在哪里看的指示?

更新 1

我用来生成指向 new_foo 项目的链接的代码(使用 HAML 和引导程序):

= button_to "New Foo!", new_foo_path, :method => :get, :class => btn_class

控制器中的代码如下所示:

def new
  @foo = Foo.new(:my_attribute => 2500)
end

关于第二条评论——我不认为这个对象此时会被保存在数据库中?我认为 Rails object.new 方法只是在内存中构建它,直到#save 才会持久化。

更新 2

在将代码更改为“link_to”时,问题似乎已经消失了......你能解释一下吗?

4

1 回答 1

2

button_to 与 link_to 不同。button_to 实际上会在页面中构建一个表单。表格将是这样的。

<form action="/foo/new" class="button_to" method="get">
   <div><input type="submit" value="abc"></div>
</form>

它是一个获取表单,当点击提交时,将使用表单中的输入字段作为参数。不会使用该操作的查询。例如:

= button_to new_foo_path(:test => true)
#=> <form action="/foo/new?test=true" class="button_to" method="get">
      <div><input type="submit" value="abc"></div>
    </form>

当你点击提交时,url 将是“/foo/new?”,test=true 消失了。它是 html 的专长。可能再举一个例子会让你明白。

= form_tag(new_foo_path(:test => true), :method => :get) do
   = hidden_field_tag "field_in_form", "true"
   = submit_tag "submit"

after you click submit. the url will be "/foo/new?field_in_form=true".I think the "?" always appear when you submit a get form contain input(include submit_tag).

于 2012-04-25T09:43:22.063 回答