如何覆盖ruby中的[]括号?

10 ruby select escaping ruby-on-rails

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

<%= collection_select("Jobs", "clearance", @allClearances, "clearance", "clearance", {:prompt => "Select a Clearance"} )%>
Run Code Online (Sandbox Code Playgroud)

然后,Ruby使用id = "Jobs_clearance"和构建HTML选择标记name = "Jobs[clearance]"

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

class JobsController < ApplicationController
  def foo
    @clearance = params[:Jobs[clearance]]
  end
Run Code Online (Sandbox Code Playgroud)

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

Oin*_*nak 53

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

class AntiArray < Array

  def [](ind)
    self.fetch(-ind)
  end

end

y = AntiArray.new([1,2,3,4])

y[1]

=> 4
Run Code Online (Sandbox Code Playgroud)


kmo*_*511 10

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

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