Ruby on rails 将布尔参数传递给rails中的命名路由
我想显式地将布尔值false传递给params[:closed],我得到如下结果:Ruby on rails 将布尔参数传递给rails中的命名路由,ruby-on-rails,parameters,boolean,params,Ruby On Rails,Parameters,Boolean,Params,我想显式地将布尔值false传递给params[:closed],我得到如下结果: = link_to 'appointments', appointments_path(:closed => false) 但这不起作用,因为rails处理的是一个假布尔值,因为我不想为这个参数设置任何东西,有没有办法解决这个问题 更新:我传递的false是一个布尔值,我想要一个像这样的url \appointments?closed=false 但我得到的只是约会。希望这更清楚一点 附带问题,将布尔值
= link_to 'appointments', appointments_path(:closed => false)
但这不起作用,因为rails处理的是一个假布尔值,因为我不想为这个参数设置任何东西,有没有办法解决这个问题
更新:我传递的false是一个布尔值,我想要一个像这样的url
\appointments?closed=false
但我得到的只是约会。希望这更清楚一点
附带问题,将布尔值作为参数传递是一种好的做法吗?这将导致?closed=false
params[:closed]
然后将返回“false”
,这是一个字符串,并将计算为true
我会为此使用命名路由,而不是躁狂的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
现在可能太晚了,但请尝试使用字符串:
appointments_path(:closed => 'false')
听起来你需要3种不同的选择。关闭未选中,关闭设置为true或设置为false 如果您需要区分closed和not selected,并像这样设置为false,则只需使用字符串和
params[:closed]==“false”
。如果rails有一些捕获,可以将url字符串转换为布尔值,那么就不能将字符串“false”
作为参数传递,这会很奇怪
如果关闭的参数总是为真或假(没有未选择的选项),那么按照现在的方式执行就可以了
在_path方法中使用:closed=>true
或:closed=>false
指定它,然后使用参数[:closed]
测试它,如下所示:
if params[:closed]
blah
else
other_blah
end
你能提供更多的上下文来解释这一点吗?这是http请求参数吗…?我传递的false是一个布尔值而不是字符串,因此params[:closed]是emtpy。我实际上知道要生成的url?closed=false,但如何?如果我将其设置为closed=true,它会工作,但不会出错。试试我建议的方法怎么样?在约会索引操作中,我根据传入的各种参数筛选集合,因此在索引中返回的get是动态的。在视图中,用户可以从下拉列表中选择状态、日期、关闭或不关闭等。因此,为所有这些路径创建命名路由并不理想。