0

作为 Rails 的新手,我找不到如何解决我的问题 ^^
我想从带有包含视频 url 的文本字段(如 youtube)的表单创建一个 VideoPost
多亏了 gem,我正在获取有关视频的信息https://github.com/thibaudgg/video_info
我想使用我的模型(VideoInformation)保存这些信息。但我不知道创建过程应该如何工作。
谢谢你的帮助 !

我正在尝试在 VideoPostsController 中创建一个 VideoPost,如下所示:

def create
  video_info = VideoInfo.new(params[:video_url])
  video_information = VideoInformation.create(video_info)      #undefined method `stringify_keys' for #<Youtube:0x00000006a24120>
  if video_information.save
    @video_post = current_user.video_posts.build(video_information) 
  end
end

我的 VideoPost 模型:

# Table name: video_posts
#
#  id                   :integer          not null, primary key
#  user_id              :integer
#  video_information_id :integer
#  created_at           :datetime         not null
#  updated_at           :datetime         not null

我的 VideoInformation 模型(其属性名称与 VideoInfo gem 相同):

# Table name: video_informations
#
#  id              :integer          not null, primary key
#  title           :string(255)
#  description     :text
#  keywords        :text
#  duration        :integer
#  video_url       :string(255)
#  thumbnail_small :string(255)
#  thumbnail_large :string(255)
#  created_at      :datetime         not null
#  updated_at      :datetime         not null
4

2 回答 2

3

不知道创建过程应该如何工作

create方法需要一个带参数的散列,而不是某个任意对象。您应该使用 VideoInfo 的方法并将其转换为 ActiveRecord 可以使用的哈希值。

于 2012-10-28T22:57:02.793 回答
2

我将向 VideoInformation 模型添加一个方法,以便您可以通过传入 video_info 创建一个方法:

# app/models/video_information.rb
def self.create_from_video_info(video_info, url)
  video_information = self.new
  video_information.title = video_info.title
  video_information.description = video_info.description
  video_information.keywords = video_info.keywords
  video_information.duration = video_info.duration
  # video_url appears to not be available on video_info,
  # maybe you meant embed_url?
  video_information.video_url = url
  video_information.thumbnail_small = video_info.thumbnail_small
  video_information.thumbnail_large = video_info.thumbnail_large
  video_information.save
  video_information
end

# app/controllers/video_posts_controller.rb
def create
  video_info = VideoInfo.new(params[:video_url])
  video_information = VideoInformation.create_from_video_info(video_info, params[:video_url])

  if video_information.valid?
    current_user.video_posts << video_information
  end
end

此外,您可能希望以不同的方式进行此操作。VideoInformation有,VideoInfoVideoPost类 似乎是多余的。

也许VideoPost模型可以简单地存储视频的 URL,并且您可以在VideoInfo渲染/使用VideoPost实例时根据需要即时提取内容。

于 2012-10-28T23:15:25.943 回答