Rails将空查询参数(/ new?)附加到我的URLS

时间:2012-04-25 04:24:17

标签: ruby-on-rails url params

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

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

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

我不知道这个幻影查询参数来自哪里....我甚至不知道这是不是很重要,但出于某种原因我觉得它可能会伤害我的缓存或SEO结束。有没有人有关于在哪里看的一些指示?

更新1

我用来生成new_foo项目链接的代码(使用HAML& bootstrap):

= 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”时,问题似乎消失了......你能解释一下吗?

1 个答案:

答案 0 :(得分: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"
单击“提交”后

。网址将是“/foo/new?field_in_form=true”。我认为“?”在提交获取表单包含输入(包括submit_tag)时始终显示。