Mel*_*Mel 12 youtube video ruby-on-rails
我想在你的rails 4 app中加入你的管.
我希望用户能够上传视频文件,然后将其发布到我的管频道上.
我正在使用Rails 4和Youtube_it gem.我一直在尝试遵循这个教程:http://www.sitepoint.com/youtube-rails/
我的文件结构有项目模型和视频模型.协会是:
Project.rb
has_one :video
accepts_nested_attributes_for :video
Run Code Online (Sandbox Code Playgroud)
Video.rb
belongs_to :project
Run Code Online (Sandbox Code Playgroud)
我的视频表有一个名为:include_video的布尔属性.
<%= f.collection_radio_buttons :include_video, [[true, ' Yes'], [false, ' No']], :first, :last, {:item_wrapper_class => 'fixradio'}, {:class => "radio-inline create-project response-project"} %>
Run Code Online (Sandbox Code Playgroud)
如果这是真的,那么我想揭示用户添加视频链接的字段(属性称为:链接).
<%= f.file_field :link %>
Run Code Online (Sandbox Code Playgroud)
我问这些问题的视频表格是部分的.部分是在项目表格内部,其他问题.我还有一个局部视图,其中包含用于管夹的容器(如教程中所示).
视图部分包含在我的项目显示页面中:
<% if @project.video.include_video? %>
<%= render 'videos/particulars' %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
我的项目控制员有:
def new
@project = Project.new
@project.video = Video.new
end
def show
#authorise @project
@project = Project.find(params[:id])
@creator = User.find(@project.creator_id)
@creator_profile = @creator.profile
@project.video ||= Video.new
end
Run Code Online (Sandbox Code Playgroud)
我的项目控制器还有我视频表中的白色标记属性(和我的视频控制器一样).
def project_params
params.require(:project).permit(
video_attributes: [:include_video, :link],
Run Code Online (Sandbox Code Playgroud)
我的视频控制器有:
def show
respond_with(@video)
end
def create
@video = Video.new(video_params)
@video.project_id = video_params[:project_id]
end
def video_params
params[:video].permit(:include_video, :link, :project_id)
end
Run Code Online (Sandbox Code Playgroud)
我的video.rb有:
class Video < ActiveRecord::Base
# --------------- associations
belongs_to :project
belongs_to :program
belongs_to :proposal
belongs_to :profile
belongs_to :user
# --------------- scopes
# --------------- validations
YT_LINK_FORMAT = /\A.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*\z/i
validates :link, presence: true, format: YT_LINK_FORMAT
# --------------- class methods
# --------------- callbacks
before_create -> do
uid = link.match(YT_LINK_FORMAT)
self.uid = uid[2] if uid && uid[2]
if self.uid.to_s.length != 11
self.errors.add(:link, 'is invalid.')
false
elsif Video.where(uid: self.uid).any?
self.errors.add(:link, 'is not unique.')
false
else
get_additional_info
end
end
# --------------- instance methods
# --------------- private methods
def get_additional_info
begin
client = YouTubeIt::OAuth2Client.new(dev_key: ENV['YT_developer_key'])
video = client.video_by(uid)
self.title = video.title
self.duration = parse_duration(video.duration)
self.author = video.author.name
self.likes = video.rating.likes
rescue
self.title = '' ; self.duration = '00:00:00' ; self.author = '' ; self.likes = 0 ; self.dislikes = 0
end
end
def parse_duration(d)
hr = (d / 3600).floor
min = ((d - (hr * 3600)) / 60).floor
sec = (d - (hr * 3600) - (min * 60)).floor
hr = '0' + hr.to_s if hr.to_i < 10
min = '0' + min.to_s if min.to_i < 10
sec = '0' + sec.to_s if sec.to_i < 10
hr.to_s + ':' + min.to_s + ':' + sec.to_s
end
end
Run Code Online (Sandbox Code Playgroud)
我有一个相关的问题,并从这篇文章得到了帮助:Rails 4 with You Tube
然而,它创造了一个新问题,我不知道它是否正在推进我的解决方案的进展.
新的位(来自用户在另一个发布的问题上提出的建议)是向我的项目控制器添加一个显示行以用于视频.当我尝试这个时,我收到此错误:
Failed to save the new associated video.
Run Code Online (Sandbox Code Playgroud)
当我尝试创建一个视频形式部分在其中的全新项目时,我在保存表单时出错.它说视频链接无效(我从硬盘驱动器中选择.mov文件).
然后我将video.rb中的验证更改为:
validates :link, format: YT_LINK_FORMAT, :allow_blank => true, :allow_nil => true
Run Code Online (Sandbox Code Playgroud)
(即删除:presence:true,并添加空白和零,但我仍然得到该错误)
如何解决这个问题呢?
Сер*_*вич -1
您可以使用omniauth-google-oauth2 gem 进行Google 的完整身份验证。
在 devise.rb 中:
config.omniauth :google_oauth2, ENV['GP_key'], ENV['GP_secret'],
{
name: 'google',
scope: 'plus.login, userinfo.email, userinfo.profile,
...
youtube, youtube.readonly, youtubepartner,
youtube.upload, youtubepartner,
youtubepartner-channel-audit',
prompt: "select_account"
}
Run Code Online (Sandbox Code Playgroud)
希望能解决你的困难...
| 归档时间: |
|
| 查看次数: |
962 次 |
| 最近记录: |