当方法名称是动态的时,如何在Ruby中调用方法?
@video = Video.new thumb = "video_thumbnail" @video_thumbnail = @video.video_thumbnail ## works fine @video_thumbnail = @video.thumb ## undefined method `thumb'
如何动态调用video_thumbnail
方法?
在Ruby中,您可以使用类似于此的send
:
thumb = :video_thumbnail @video_thumbnail = @video.send(thumb)
但是,您应该了解此方法可能带来的安全隐患。 如果thumb
变量的内容以任何方式由用户控制(例如,通过从params
设置),则任何用户都可以在video对象上调用任意方法。 考虑到Rails中的大量元编程,您可以轻松地以这种方式调用和运行任意代码。 因此,您应该确保您严格控制thumb
变量的内容。
如果可能,您应该使用其他方法来调用方法,例如通过使用单独的控制器操作和适当的路由来调用它们。
你有send()
来动态调用方法(如果对象可能有重写send
,则__send__
)