@video = Video.new
thumb = "video_thumbnail"
@video_thumbnail = @video.video_thumbnail ## works fine
@video_thumbnail = @video.thumb ## undefined method `thumb'
如何动态调用video_thumbnail
方法?如何在方法名称为动态时在Ruby中调用方法?
@video = Video.new
thumb = "video_thumbnail"
@video_thumbnail = @video.video_thumbnail ## works fine
@video_thumbnail = @video.thumb ## undefined method `thumb'
如何动态调用video_thumbnail
方法?如何在方法名称为动态时在Ruby中调用方法?
在Ruby中,你可以使用send
此类似:
thumb = :video_thumbnail
@video_thumbnail = @video.send(thumb)
然而,您应该意识到这种方法的潜在安全影响。如果thumb
变量的内容以任何方式由用户控制(例如通过将其设置为params
),则任何用户可能都有可能在视频对象上调用任意方法。考虑到Rails中大量的元编程,您可以很容易地以这种方式调用和运行任意代码。因此,您应该确保您严格控制thumb
变量的内容。
如果可能,您应该使用其他方法调用方法,例如通过使用单独的控制器操作和适当的路由来调用它们。
你必须send()
动态调用方法(和__send__
如果对象可能重写send
)
'send'会很开心地调用私人方法 –
编辑我的帖子。 – Ven
@Ven它仍然意味着'send'只适用于公共方法。 –