我是Rails的新手,我是第一次处理这种情况。
我有一个ActiveRecord课程,视频。
class Video < ActiveRecord::Base
def generate_html_for_content
raw_embed
end
private
def save_image
self.remote_screenshot_url = extract_thumb if screenshot.blank?
end
def save_raw_embed
self.raw_embed = create_embed
end
def extract_thumb
if is_youtube_video?
youtube_image
else
'http://placehold.it/160x90'
end
end
def create_embed
youtube_embed if is_youtube_video?
end
def is_youtube_video?
# https://www.youtube.com/watch?v=lmc21V-zBq0
url.include? 'youtu'
end
def youtube_id
url.match(/^(?:https?:\/\/)?(?:www\.)?youtu(?:\.be|be\.com)\/(?:watch\?v=)?([\w-]{10,})/)[1]
end
def youtube_embed
"<div class=\"embeddedContent\"><iframe id=\"ytplayer\" type=\"text/html\" width=\"1080\" height=\"607.5\" src=\"https://www.youtube.com/embed/#{youtube_id}?autohide=1?rel=0&color=white\" frameborder=\"0\" allowfullscreen></iframe></div>"
end
def youtube_image
"http://img.youtube.com/vi/#{youtube_id}/0.jpg"
end
end
我还有两个回调
before_save :save_image
before_save :save_raw_embed
当我从表单中创建新视频时,模型会在视频表格中添加视频缩略图和视频嵌入代码,稍后我将在视图中使用。
我不喜欢这种意大利面条代码,我想使用名为&#34; video_info&#34;这给了我嵌入代码,缩略图和一切的方法。
我添加了一个方法:
def create_video_object
video_object = VideoInfo.new(url)
end
video_object
拥有我需要的所有方法,因此我可以删除上面的丑陋方法。
我的问题是:每次访问Video.rb
的实例时,如何创建video_object?
答案 0 :(得分:2)
每次创建视频时都不需要创建这样的对象,因为VideoInfo
不会持久存储到数据库中。
最简单的方法是在info
模型中添加Video
方法,初始化并返回VideoInfo
的实例:
def info
VideoInfo.new(url)
end
然后使用这样的方法:
@video = Video.new(url: 'https://www.youtube.com/watch?v=DLzxrzFCyOs')
@video.info.provider
#=> 'YouTube'