如何覆盖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 >
希望这是你要求的。 试试你