【发布时间】:2014-10-10 03:41:31
【问题描述】:
使用 Ruby on Rails 4,我有一个 UI,用户可以在其中从服务器上的目录路径中选择视频文件。然后,他们单击一个按钮,该按钮在文件上运行媒体信息并显示视频的 xml,同时解析 xml 中的某些数据值并将该值分配给 @variables 并将其显示在 UI html 页面中。这一切都在“评估媒体”的动作/方法中完成。当页面加载回来时,它会确定该文件是否已保存,并允许用户将文件名、路径和媒体信息属性保存到 mysql 中的表中。当您单击保存按钮时,它会调用动作/方法“save_file”。当我尝试将这些变量值分配给模型类字段以插入表中(在控制器内)时。不读取值。它只插入空值。如何 我可以让这些在“evaluate_media”操作中分配的变量值也可用于“save_file”操作或同一控制器中的任何其他操作吗?根据它们的设置和定义方式,我认为它们在模型/控制器对象“file_alias_tfile”的范围内可用。
在“save_file”操作中,我尝试使用 3 种不同的方式分配值:
full_path = params[:filepath2] <--This one puts a NULL into the table
src_location = @radio_button_value <--This one puts a NULL into the table
directory = "#{@dir_path_choice}" <--This one doesn't even get called into the insert script and nothing is inthe column on insert. (I don't get errors and a record does geet inserted with the other good values.)into the table
这是我尝试将变量值分配给模型字段的 save_file 操作/方法代码:
def save_file
src_location = @radio_button_value
directory = "#{@dir_path_choice}"
full_path = params[:filepath2]
# "#{@filepathname}"
full_filename = "#{@filepath}"
alias_code = "#{@file_alias}"
validate_status = "#{@file_status}"
error_msg = "#{@file_msg}"
video_alias_match = "#{@msg_dtl1}"
audio_alias_match = "#{@msg_dtl2}"
video_format = "#{@video_format}"
video_bitrate = "#{@video_bitrate}"
video_width = "#{@video_width}"
video_height = "#{@video_height}"
video_framerate = "#{@video_framerate}"
video_aspect_ratio = "#{@video_aspectratio}"
video_scan_type = "#{@video_scantype}"
video_scan_order = "#{@video_scanorder}"
@file_alias_tfile = FileAliasTfile.new( :src_location => src_location, :directory => directory, :full_path => full_path, :full_filename => full_filename, :file_ext => '',
:assigned_status => 'Unassigned', :file_status => 'Saved', :alias_code => alias_code, :validate_status => validate_status, :error_msg => error_msg,
:video_alias_match => video_alias_match, :audio_alias_match => audio_alias_match, :video_format => video_format, :video_bitrate => video_bitrate,
:video_width => video_width, :video_height => video_height, :video_framerate => video_framerate, :video_aspect_ratio => video_aspect_ratio,
:video_scan_type => video_scan_type, :video_scan_order => video_scan_order, :video_alias_code => '', :audio_alias_code => '',
:bus_prod_initiative_id => 0, :status => 'Active', :start_date => DateTime.now.to_date, :end_date => '', :deleted_b => 0,
:created_by => 'admin', :updated_by => 'admin')
@file_alias_tfile = FileAliasTfile.create(file_alias_tfile_params)
if @file_alias_tfile.save
redirect_to mainpages_home_path, :notice => "The file alias validation has been saved."
else
redirect_to alias_mainpages_home_path, :notice => "The file alias validation has been saved."
# 渲染 = "索引" 结尾 结束
这里是 'evaluate_media' 方法,其中定义了上面在 save_file 中调用的值:
定义评估媒体 @state = '发布' @radio_button_value = 参数[:location]
#Determine if file chosen has been saved to database yet.
@stored_file = FileAliasTfile.where(:full_path => params[:filepath2], :deleted_b => 0).first
if @stored_file.present?
@file_exists_flag = 'Y'
@file_exists_msg = 'This File and Alias has been saved in application.'
else
@file_exists_flag = 'N'
@file_exists_msg = 'This File and Alias has NOT been saved in application yet.'
end
root_dir = '/watchfolder/miniprod/hot/'
provider_dir = ""
#Store selected value for re-display on post.
@selected_filepath = params[:filepath2]
filepath = File.join(root_dir, provider_dir, params[:filepath])
@filepath = File.join(params[:filepath2])
@media_xml = ::MediaInfo.call(@filepath) #Filepath is sent in from the index html
@alias_xml = ::AliasGenerator.call(@media_xml)
@media_xml_for = ""
@alias_xml_for = ""
REXML::Document.new(@media_xml).write(@media_xml_for, 1)
REXML::Document.new(@alias_xml).write(@alias_xml_for, 1)
alias_parse_doc = ""
media_parse_doc = ""
alias_parse_doc = REXML::Document.new(@alias_xml)
media_parse_doc = REXML::Document.new(@media_xml)
#parse Alias XML Doc
# @aliasgen_ver = alias_parse_doc.elements.each("/aliasGenerator vr=/text()") { |e| e }
@aliasgen_ver = REXML::XPath.each(alias_parse_doc, "/aliasGenerator vr=/text()") { |element| element }
@file_alias = REXML::XPath.each(alias_parse_doc, "*//alias/text()") { |element| element }
@file_status = REXML::XPath.each(alias_parse_doc, "*//error/text()") { |element| element }
@file_msg = REXML::XPath.each(alias_parse_doc, "*//error_m/text()") { |element| element }
@msg_dtl1 = REXML::XPath.each(alias_parse_doc, "*//closestvideoalias/text()") { |element| element }
@msg_dtl2 = REXML::XPath.each(alias_parse_doc, "*//closestaudioalias/text()") { |element| element }
#parse Video Media Info XML Doc
@filepathname = REXML::XPath.each(media_parse_doc, "*//Complete_name/text()") { |element| element }
@video_format = REXML::XPath.each(media_parse_doc, "//track[@type='Video']/Format/text()") { |element| element }
@video_bitrate = REXML::XPath.each(media_parse_doc, "//track[@type='Video']/Bit_rate/text()") { |element| element }
@video_width = REXML::XPath.each(media_parse_doc, "//track[@type='Video']/Width/text()") { |element| element }
@video_height = REXML::XPath.each(media_parse_doc, "//track[@type='Video']/Height/text()") { |element| element }
@video_aspectratio = REXML::XPath.each(media_parse_doc, "//track[@type='Video']/Display_aspect_ratio/text()") { |element| element }
@video_framerate = REXML::XPath.each(media_parse_doc, "//track[@type='Video']/Frame_rate/text()") { |element| element }
@video_scantype = REXML::XPath.each(media_parse_doc, "//track[@type='Video']/Scan_type/text()") { |element| element }
@video_scanorder = REXML::XPath.each(media_parse_doc, "//track[@type='Video']/Scan_order/text()") { |element| element }
#parse Audio Media Info XML Doc
# @audio_track = REXML::XPath.each(media_parse_doc, "//track[@type= 'Audio']/track/text()") { |element| element }
# @track_array = REXML::XPath.each(media_parse_doc,(@audio_track)) do {|track| track.elements["Bit_rate"].text }
# @bitrate = track.elements["Bit_rate"].text
# end
#@audio_tracknum = REXML::XPath.each(media_parse_doc, "//track[@type='Audio']/track streamid=/text()") { |element| element }
# @audio_format = REXML::XPath.each(media_parse_doc, "//track[@type='Audio']/Format/text()") { |element| element }
# @audio_bitrate = REXML::XPath.each(media_parse_doc, "//track[@type='Audio']/Bit_rate/text()") { |element| element }
# @audio_numchan = REXML::XPath.each(media_parse_doc, "//track[@type='Audio']/Width/text()") { |element| element }
# @audio_language = REXML::XPath.each(media_parse_doc, "//track[@type='Audio']/Display_aspect_ratio/text()") { |element| element }
render :action => :index
结束
您能否提供一个示例,说明如何正确设置变量以跨操作传递和/或如何在插入中正确地将它们分配给数据库?
感谢您的帮助!
【问题讨论】:
标签: variables ruby-on-rails-4 model-view-controller methods session-variables