我想显式地将布尔值false传递给params [:closed],我有类似的东西:
= link_to 'appointments', appointments_path(:closed => false)
但是这不起作用,因为rails正在处理一个错误的布尔值,因为我不想为这个参数设置任何东西,有没有办法解决这个问题?
更新:我传入的错误是一个布尔值,我想要一个这样的网址
\appointments?closed=false
但我得到的只是\约会。希望这更清楚一点。
附带问题,将布尔作为params传递是一种好习惯吗?
答案 0 :(得分:3)
现在可能为时已晚,但请尝试使用字符串:
appointments_path(:closed => 'false')
答案 1 :(得分: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
答案 2 :(得分:0)
听起来你需要3种不同的选择。未选中已关闭,已关闭设置为true或设置为false。
如果您需要区分已关闭和未被选中并将其设置为false,则需要使用字符串和params[:closed] == 'false'
。如果rails有一些将url字符串转换为布尔值的catch,则无法将字符串"false"
作为参数传递,这很奇怪。
如果您的关闭参数总是为真或假(没有未选择的选项),那么就像你正在做的那样就可以了。
您可以使用:closed => true
或:closed => false
在_path方法中指定它,然后使用params[:closed]
进行测试,如下所示:
if params[:closed]
blah
else
other_blah
end