我正在使用带有collection_select
标记的Ruby on Rails编写Ajax请求表单,如下所示:
<%= collection_select("Jobs", "clearance", @allClearances, "clearance", "clearance", {:prompt => "Select a Clearance"} )%>
Ruby然后使用id = "Jobs_clearance"
和name = "Jobs[clearance]"
我想将参数发送到我的控制器,如下所示:
class JobsController < ApplicationController
def foo
@clearance = params[:Jobs[clearance]]
end
不幸的是,Ruby只读取":Jobs"
作为符号而不是":Jobs[clearance]"
有没有办法逃脱[]
的?反斜杠不起作用。
答案 0 :(得分:53)
kmorris解决了你的问题(非常好),但我想回答你的问题: 你可以覆盖[]和[] =运算符,因为它们是方法(就像几乎所有的东西一样),但是你应该好好考虑一下你正在做什么,因为你可以打破很多东西。
class AntiArray < Array
def [](ind)
self.fetch(-ind)
end
end
y = AntiArray.new([1,2,3,4])
y[1]
=> 4
答案 1 :(得分:10)
您需要使用params[:Jobs][:clearance]
params
是所有请求参数的哈希值。但是params[:Jobs
]也是所有的哈希:作业参数。因此,调用params[:Jobs][:clearance]
会将[]
对象上的params[:Jobs]
方法作为参数传递给:clearance
。
答案 2 :(得分:0)
@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 >
希望这是你要求的。给你一个尝试