0

с использованием Ruby on Rails 4, у меня есть пользовательский интерфейс, где пользователь может выбрать видеофайл из пути каталога на сервере. Затем они нажимают кнопку, которая запускает информацию о файле в файле, и отображает xml для видео, а также анализирует определенные значения данных из xml и присваивает значение @variables и отображает его обратно на странице html UI. Все это делается в действии/методе «оценивать медиа». Когда страница загружается обратно, она определяет, был ли этот файл сохранен или нет, и позволяет пользователю сохранять атрибуты имени файла, пути и носителя информации в таблице в mysql. Когда вы нажимаете кнопку сохранения, он вызывает acton/method 'save_file'. Когда я пытаюсь присвоить эти значения переменных полям класса модели для вставки в таблицу (внутри контроллера). Значения не читаются. Он вставляет только нули. Как могу ли я иметь эти значения переменных, назначенные в действии 'evaluation_media', также доступны для действия «save_file» или любого другого действия на одном контроллере? Основываясь на том, как они были настроены и определены, я думал, что они были доступны в рамках объекта model/controller 'file_alias_tfile'.В Rails4 Как назначить переменные в одном действии контроллера и использовать его значение в другом действии контроллера

В «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 определены:

Защиту evaluate_media @state = 'пост' @radio_button_value = PARAMS [: местоположение]

#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 

конец

Можете ли вы предоставить мне пример того, как я могу либо настройки мои переменные правильно проходить через действия и/или как правильно назначить их на вставке в базу данных?

Ваша помощь приветствуется!

ответ

0

Я нашел ответ в другом вопросе для моего поиска, но он все еще оставляет открытым вопрос.

Вот ссылка на другой вопрос и ответ для более подробной информации: Same instance variable for all actions of a controller

В основном это дало мне 2 подхода. Если мое одно действие не выполняется от другого, и оба метода должны получить доступ к значениям, тогда мне нужно будет определить другой метод, в котором я назначаю переменные, а затем оба метода save_file и valu_media вызывают этот новый метод определения, чтобы они тоже могли доступ к переменным. Вот пример, в котором вопрос касался методов индекса и show, использующих одну и ту же переменную.

def index 
    set_up_instance_variable 
end 

def show 
    set_up_instance_variable 
end 

private 

def set_up_instance_variable 
    @some_instance_variable = foo 
end 

Другим решением является использование before_filter:

Вы можете определить переменные экземпляра для нескольких действий с использованием перед фильтром, например:

class FooController < ApplicationController 
    before_filter :common_content, :only => [:index, :show] 

def common_content 
    @some_instance_variable = :foo 
    end 
end 

Теперь @some_instance_variable будут доступны все шаблоны (включая частичные), отображаемые из индекса или действия show.

Смежные вопросы