我有一个字符串,我想将其用作变量名的一部分。具体来说,在 Rails 路由路径中:
<%= foo_path %>
<%= bar_path %>
我希望路线名称的第一部分是动态的。所以像
@lol = "foo"
<%= [@lol]_path %> # <-- This would really be the "foo_path" variable
鲁比能做到这一点吗?
我有一个字符串,我想将其用作变量名的一部分。具体来说,在 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
最后调用。希望我很清楚。