2012-04-25 26 views
1

对此问题可能有明显的答案......但我不确定在哪里寻找。Rails将空查询参数(/新?)添加到我的URLS

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

当我点击按钮去这个路径,网址为:“localhost/foo/new?”

我不知道这个幻像查询参数是从哪里来的....我甚至不知道这是否是一个大问题,但由于某种原因,我觉得它可能会伤害我的缓存或搜索引擎优化结束。有没有人有一些指向哪里看?

更新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 

关于第二个评论 - 我不认为这个对象会持久在数据库中a这一点?我认为Rails的object.new方法只是将它构建在内存中,直到#save才得到保存。

更新2

在代码更改为“的link_to”这个问题似乎已经消失......你能解释一下吗?

+0

您可以在调用new_foo帮助程序生成新的foo链接时添加您正在使用的代码吗? – spike 2012-04-25 04:28:10

+0

检查数据库中是否存在'foo'。 – luacassus 2012-04-25 05:10:28

+0

感谢评论家伙 - 我在问题中添加了更多细节。我甚至可能已经知道了,但不知道为什么! @luacassus - 我不认为这个对象会在这个时候保持在数据库中......通常新的动作只是在内存中为表单创建一个对象? – Brandon 2012-04-25 05:52:01

回答

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)时总是出现。

+0

感谢您的详细解答刀片。想想我现在已经掌握了这一点! – Brandon 2012-04-25 13:43:13

相关问题