Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails,在访问或创建另一个实例时创建对象_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails Rails,在访问或创建另一个实例时创建对象

Ruby on rails Rails,在访问或创建另一个实例时创建对象,ruby-on-rails,ruby,Ruby On Rails,Ruby,我是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_r

我是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
当我从表格中创建新视频时,模型会将视频缩略图和视频嵌入代码添加到视频表中,稍后我将在视图中使用这些代码

我不喜欢这个意大利面代码,我想使用一个名为“video_info”的gem,它提供了获取嵌入代码、缩略图和所有内容的方法

我添加了一个方法:

def create_video_object
  video_object = VideoInfo.new(url)
end
video\u object
包含了我需要的所有方法,因此我可以删除上面难看的方法。
我的问题是:如何在每次访问
video.rb
的实例时创建一个video\u对象?

没有必要在每次创建视频时创建这样的对象,因为
VideoInfo
不会持久保存到数据库中

最简单的方法是在
Video
模型中添加一个
info
方法,该方法初始化并返回
VideoInfo
的实例:

def info
  VideoInfo.new(url)
end
然后像这样使用该方法:

@video = Video.new(url: 'https://www.youtube.com/watch?v=DLzxrzFCyOs')
@video.info.provider
#=> 'YouTube'

无需在每次创建视频时创建这样的对象,因为
VideoInfo
不会持久保存到数据库中

最简单的方法是在
Video
模型中添加一个
info
方法,该方法初始化并返回
VideoInfo
的实例:

def info
  VideoInfo.new(url)
end
然后像这样使用该方法:

@video = Video.new(url: 'https://www.youtube.com/watch?v=DLzxrzFCyOs')
@video.info.provider
#=> 'YouTube'