2009-05-21 58 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