2
@video = Video.new
thumb = "video_thumbnail"
@video_thumbnail = @video.video_thumbnail  ## works fine 
@video_thumbnail = @video.thumb            ## undefined method `thumb'

如何video_thumbnail动态调用该方法?

4

2 回答 2

6

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

thumb = :video_thumbnail
@video_thumbnail = @video.send(thumb)

但是,您应该意识到这种方法的潜在安全隐患。如果thumb变量的内容可以由用户以任何方式控制(例如,通过从 设置它params),则任何用户都可能在您的视频对象上调用任意方法。鉴于 Rails 中的大量元编程,您可以轻松地以这种方式调用和运行任意代码。因此,您应该确保严格控制thumb变量的内容。

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

于 2013-05-25T13:28:25.537 回答
2

您必须send()动态调用方法(并且__send__如果对象可能已覆盖send

http://ruby-doc.org/core-2.0/Object.html#method-i-send

于 2013-05-25T13:23:21.770 回答