Ruby on rails 将布尔参数传递给rails中的命名路由

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 但我得到的只是约会。希望这更清楚一点 附带问题,将布尔值

我想显式地将布尔值false传递给params[:closed],我得到如下结果:

= 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是动态的。在视图中,用户可以从下拉列表中选择状态、日期、关闭或不关闭等。因此,为所有这些路径创建命名路由并不理想。