Я пытаюсь включить вас в трубку в своих рельсах 4 приложения.Rails 4 with You Tube
Я хочу, чтобы пользователи могли загружать видеофайл, который затем будет размещен на моем трубном канале.
Я использую Rails 4 с драгоценным камнем Youtube_it. Я пытаюсь следовать этому руководству: http://www.sitepoint.com/youtube-rails/
В моей файловой структуре есть модель проекта и видеомод. Ассоциации являются:
Project.rb
has_one :video
accepts_nested_attributes_for :video
Video.rb
belongs_to :project
Мое видео таблица имеет булево атрибут: 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"} %>
Если это правда, то я хочу, чтобы открыть поле, где пользователи добавляют ссылку на видео (атрибут называется: ссылка).
<%= f.file_field :link %>
Видео форма, в которой я задаю эти вопросы, является частичной. Частично внутри формы проекта, которая имеет другие вопросы. У меня также есть частичный вид, в котором есть контейнер для вашей трубки (как показано в учебнике).
мнение частичное включено в моем шоу-странице проекта, как:
<% if @project.video.include_video? %>
<%= render 'videos/particulars' %>
<% end %>
Моя проблема заключается в том, что, когда я попробовать этот подход, я получаю ошибку, которая говорит:
undefined method `include_video?' for nil:NilClass
Я не» t понять, что неопределенный метод означает в контексте имени атрибута в моей видео таблице, и я также не понимаю, что nil: NilClass означает.
Я также попытался включая просмотр видео парциальное по:
<% if @project.video.try(:include_video) %>
<%= render 'videos/particulars' %>
<% end %>
Это не дает сообщение об ошибке, но он также не показывает клип (и когда я проверить элемент в коде инспектора, он не отображается вообще. Я вижу, что загрузка также не была сохранена в db, потому что мой поиск в консоли говорит, что нет видеороликов.
Контроллер моего проекта имеет белые отмеченные атрибуты из моей таблицы видео (как мой видеоконтроллер.
def project_params
params.require(:project).permit(
video_attributes: [:include_video, :link],
def video_params
params[:video].permit(:include_video, :link, :project_id)
end
Как я могу это понять?
Мое видео.гь имеет:
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
Мой project_controller имеет:
def new
@project = Project.new
@project.video = Video.new
end
Мой video_controller имеет:
def show
respond_with(@video)
end
def create
@video = Video.new(video_params)
@video.project_id = video_params[:project_id]
end
Youtube недавно изменил свою публичную апи, и я хотел бы предложить вам исследовать это немного, потому что это может быть проблема на самом деле. У меня также были проблемы с 'youtube_it' gem в последнее время. –