1

我想明确地将布尔值 false 传递给 params[:closed] 并且我有这样的东西:

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

但这不起作用,因为 rails 正在处理一个错误的布尔值,因为我不想为这个参数设置任何东西,有没有办法解决这个问题?

更新:我传入的 false 是一个布尔值,我想要一个这样的 url

\appointments?closed=false

但我得到的只是\约会。希望这更清楚一点。

附带问题,将布尔值作为参数传递是一种好习惯吗?

4

3 回答 3

3

现在可能为时已晚,但请尝试使用字符串:

appointments_path(:closed => 'false')
于 2009-10-03T19:53:30.820 回答
0

这将导致?close=false。params[:closed]然后将返回"false",这是一个字符串,并将评估为真。

我会为此使用命名路由,而不是狂躁的 if/else 检查“索引”操作。

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

# controller
def closed
  @appointments = Appointment.closed
end

def open
  @appointments = Appointment.open
end
于 2009-05-21T15:37:37.940 回答
0

听起来你需要 3 个不同的选项。关闭未选中,关闭设置为 true 或设置为 false。

如果您需要区分已关闭与未被选中并像这样设置为 false,则只需使用字符串和params[:closed] == 'false'. 如果 rails 有一些可以将 url 字符串转换为布尔值的捕获,那么您将无法将字符串"false"作为参数传递,这会很奇怪。

如果您的关闭参数始终为真或假(没有未选择的选项),那么像您正在做的那样做就可以了。

您在 _path 方法中使用:closed => trueor指定它,:closed => false然后使用params[:closed]如下所示对其进行测试:

if params[:closed]
  blah
else
  other_blah
end
于 2009-10-30T20:12:01.567 回答