2012-04-25 38 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