如何覆盖ruby中的括号?

我正在使用一个如下所示的collection_select标签编写一个带有Ruby on Rails的Ajax请求表单:

  "Select a Clearance"} )%> 

Ruby然后构建一个HTML选择标记,其id = "Jobs_clearance"name = "Jobs[clearance]"

我想将参数发送到我的控制器,如下所示:

 class JobsController < ApplicationController def foo @clearance = params[:Jobs[clearance]] end 

不幸的是,Ruby只读取":Jobs"作为符号,而不是":Jobs[clearance]"
有没有办法逃脱[]的? 反斜杠不起作用。

你需要使用params[:Jobs][:clearance]

params是所有请求参数的哈希值。 但是params[:Jobs ]也是所有的哈希:Jobs参数。 所以调用params[:Jobs][:clearance]调用params[:Jobs]对象上的[]方法传递:clearance in作为参数。

kmorris解决了你的问题(非常好),但我想回答你的问题:你可以覆盖[]和[] =运算符,因为它们是方法(几乎所有的东西),但是你应该好好考虑你在做什么,因为你可以打破了很多东西。

 class AntiArray < Array def [](ind) self.fetch(-ind) end end y = AntiArray.new([1,2,3,4]) y[1] => 4 

@German,试图回答你的问题。

 2.1.3 :025 > class AntiArray < Array 2.1.3 :026?> def [](ind) 2.1.3 :027?> self.fetch(-ind) + 1 2.1.3 :028?> end 2.1.3 :029?> end => :[] 2.1.3 :030 > y = AntiArray.new([1,2,3,4]) => [1, 2, 3, 4] 2.1.3 :031 > y[1] => 5 2.1.3 :032 > 

希望这是你要求的。 试试你