我有一个字符串,想将其作为变量名的一部分。具体来说,在Rails路由路径中:
<%= foo_path %>
<%= bar_path %>
我希望路由名称的第一部分是动态的。因此类似以下内容:
@lol = "foo"
<%= [@lol]_path %> # <-- This would really be the "foo_path" variable
Ruby能做到这个吗?
我有一个字符串,想将其作为变量名的一部分。具体来说,在Rails路由路径中:
<%= foo_path %>
<%= bar_path %>
@lol = "foo"
<%= [@lol]_path %> # <-- This would really be the "foo_path" variable
lol = 'foo'
send "#{lol}_path"
# or
send lol + '_path'
解释: Object#send
方法把方法发送给接收者(也就是在接收者上"调用"该方法)。与任何方法调用一样,没有明确的接收者时(例如some_object.send 'foo'
),当前上下文会变成接收者,因此调用send :foo
等价于self.send :foo
。实际上,Rails在幕后经常使用这种技术(例如)。
还有更多内容!
class Person
attr_accessor :pet
end
class Pet
def make_noise
"Woof! Woof!"
end
end
var_name = "pet"
p = Person.new
p.pet = Pet.new
(p.send "#{var_name}").make_noise
这里所发生的是:
p.send "some_method"
调用 p.some_method
,并且使用括号使链接成为可能,即最后调用 p.pet.make_noise
。希望我表达清楚了。
p.send(var_name).make_noise
。 - Jordan Running