2009-05-21 61 views
1

我要明確地傳遞一個布爾值false給PARAMS [:關閉]和我有這樣的事情:傳遞布爾參數命名路由在軌

= link_to 'appointments', appointments_path(:closed => false) 

但這不是工作作爲Rails是治療假布爾值,因爲我不想爲這個參數設置任何東西,有什麼辦法可以解決這個問題嗎?

更新:我傳遞的假是一個布爾值,我想這樣的

\appointments?closed=false 

但我得到一個網址剛好\約會。希望這個更清楚一點。

旁邊的問題,是否將布爾值作爲參數傳遞?

+0

你可以提供更多的背景下,如何這是作何解釋?這是一個HTTP請求參數...? – Demi 2009-05-21 15:36:49

回答

0

這將導致?closed = false。然後params[:closed]將返回"false",這是一個字符串,並將評估爲true。

我會用這個命名路線,而不是manic if/else在'index'操作中檢查。

# routes.rb 
map.resources :appointments, :collection => {:closed => :get, :open => :get} 

# controller 
def closed 
    @appointments = Appointment.closed 
end 

def open 
    @appointments = Appointment.open 
end 
+0

我傳入的假是一個布爾值,而不是一個字符串,所以params [:closed]是emtpy。我其實的網址導致?closed = false但是如何?如果我將它設置爲closed = true,它可以工作,但不是錯誤的。 – sai 2009-05-21 20:52:22

3

可能爲時已晚了,但請嘗試使用一個字符串,而不是:

​​
0

這聽起來像你需要3個不同的選項。關閉未選中,關閉設置爲true或設置爲false。

如果您需要區分關閉與未被選中並被設置爲false,則需要使用字符串和params[:closed] == 'false'。如果rails有一些將網址字符串轉換爲布爾值的catch,那麼您將無法將字符串"false"作爲參數傳遞,這很奇怪。

如果你關閉的參數總是是真或假(沒有未選擇的選項),那麼就像你在做的那樣很好。

您與:closed => true:closed => false的_path方法指定它,然後用params[:closed]測試它在:

if params[:closed] 
    blah 
else 
    other_blah 
end