这个问题可能有一个明显的答案......但我不确定在哪里看。
出于某种原因,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”时,问题似乎消失了......你能解释一下吗?
答案 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)时始终显示。