当方法名是动态的时,如何在Ruby中调用方法?

当方法名是动态的时,如何在Ruby中调用方法?,ruby,Ruby,如何动态调用video\u缩略图方法?您可以使用send()动态调用方法(如果对象可能已覆盖send,则调用\u send) 在Ruby中,您可以使用类似的: @video = Video.new thumb = "video_thumbnail" @video_thumbnail = @video.video_thumbnail ## works fine @video_thumbnail = @video.thumb ## undefined method `thu

如何动态调用
video\u缩略图
方法?

您可以使用
send()
动态调用方法(如果对象可能已覆盖
send
,则调用
\u send

在Ruby中,您可以使用类似的:

@video = Video.new
thumb = "video_thumbnail"
@video_thumbnail = @video.video_thumbnail  ## works fine 
@video_thumbnail = @video.thumb            ## undefined method `thumb'
但是,您应该了解这种方法的潜在安全影响。如果
thumb
变量的内容由用户以任何方式控制(例如,通过从
params
进行设置),则任何用户都可能对视频对象调用任意方法。考虑到Rails中的大量元编程,您可以轻松地以这种方式调用和运行任意代码。因此,您应该确保严格控制
thumb
变量的内容


如果可能,您应该使用其他方法来调用这些方法,例如通过使用单独的控制器操作和适当的路由来调用它们。

send
将愉快地调用privatemethods@Ven这仍然意味着
send
只对公共方法有效。@AndrewMarshall,嗯,看起来我忘记验证更改了!
thumb = :video_thumbnail
@video_thumbnail = @video.send(thumb)