gpt4 book ai didi

ruby-on-rails - Rails 4与您管

转载 作者:行者123 更新时间:2023-12-03 05:58:03 24 4
gpt4 key购买 nike

我正在尝试将您的电子管整合到我的rails 4应用程序中。

我希望用户能够上传视频文件,然后将其发布到我的YouTube channel 上。

我正在将Rails 4与Youtube_it gem一起使用。我一直在尝试遵循本教程:http://www.sitepoint.com/youtube-rails/

我的文件结构具有项目模型和视频模型。关联是:

Project.rb

has_one :video
accepts_nested_attributes_for :video

Video.rb
  belongs_to :project

我的视频表具有一个称为:include_video的 bool(boolean) 属性。
    <%= f.collection_radio_buttons :include_video, [[true, ' Yes'], [false, ' No']], :first, :last, {:item_wrapper_class => 'fixradio'}, {:class => "radio-inline create-project response-project"} %>

如果是真的,那么我想显示用户在其中添加指向视频的链接的字段(属性称为:link)。
        <%= f.file_field :link %>

我问这些问题的视频表格是局部的。部分在项目表单中,还有其他问题。我还有一个局部 View ,其中包含用于您的管夹的容器(如教程中所示)。

部分 View 在我的项目显示页面中包含为:
<% if @project.video.include_video? %>

<%= render 'videos/particulars' %>
<% end %>

我的问题是,当我尝试这种方法时,出现错误消息:
undefined method `include_video?' for nil:NilClass

我不了解在视频表中属性名称的上下文中未定义方法的含义,我也不了解nil:NilClass的含义。

我还尝试通过以下方式包括部分视频 View :
<% if @project.video.try(:include_video) %>

<%= render 'videos/particulars' %>
<% end %>

这不会给出错误消息,但是也不会显示剪辑(并且当我在代码检查器中检查元素时,它根本不会显示。我可以看到上载也没有保存到数据库中,因为我的控制台搜索显示没有视频。

我的项目 Controller 的视频表中有带有白色标签的属性(视频 Controller 也是如此)。
 def project_params
params.require(:project).permit(
video_attributes: [:include_video, :link],

def video_params
params[:video].permit(:include_video, :link, :project_id)
end

我该如何解决呢?

我的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

我的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

最佳答案

出现以下错误:“未定义的方法include_video?' for nil:NilClass"-告诉您正在include_video?上调用nil。当发生此错误时,它又告诉您@project.video的值为nil。所以,这就是发生的情况。

下一个要解决的问题是“为什么@ project.video评估为nil?”。显示页面模板在Project Controller 的show操作的上下文中运行。此操作是否为@ project.video设置了值?

您可以在页面中执行以下操作:
<%= @project.video ||= Video.new %>
如果已经存在,它将保持不变,但是如果不存在,它将对其进行定义。 ||=是“等于或等于”的简写,因此上面的内容与此等效:
<%= @project.video = @project.video || Video.new %>

关于ruby-on-rails - Rails 4与您管,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31116668/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com