2014-10-11 21 views
0

在我的應用程序/索引中,用戶從下拉列表中選擇一個位置和目錄路徑。 onchange事件會調用名爲file_dir的控制器,並在其中接受路徑,執行命令行調用,將該目錄中的文件列表傳回參數@files。然後我將這個@files部分傳遞給一個局部變量。然後在部分選擇標籤將顯示傳遞給它的文件列表。需要幫助將動態文件列表傳遞給partial。無法在列表中成功通過列表

我是ROR的新手,無法成功傳遞可讀的局部變量。到部分。一切工作正常與硬編碼線,但不是局部變量。

有人可以請幫助建議我正確的方式來設置?

這裏是接收的目錄從所述第一平變化下拉通調用的方法:所述@files = Dir.glob(「#{@ dir_path_choice}/**/*

def file_dir 
    unless params[:dir_list].nil? 
     @dir_path_choice = params[:dir_list] 
    else 
     @dir_path_choice = '/watchfolder/indemandvod' 
    end 
# @files = "#{@dir}"  
    @files = Dir.glob("#{@dir_path_choice}/**/*.{mpg,mov}").map 
    if @files.nil? 
     @files = Dir.glob("/watchfolder/hbovod/**/*.{mpg,mov}").map 
    end 
    render :partial => 'list_files', :locals => { @list => @files } 
    end 

在IRB我測試。{mpg,mov}「)。map行來確保這個處理正確。以下是@files的樣子:

1.9.3-p547 :008 > @files 
=> #<Enumerator: ["/watchfolder/indemandvod/MJR-TEST.mov", "/watchfolder/indemandvod/MJR-TEST-AWS1.mov", "/watchfolder/indemandvod/MJR-TEST-AWS.mov", "/watchfolder/indemandvod/MJR-TEST2.mov", "/watchfolder/indemandvod/PIX_Gor_SVO40185/PIX_Gor_SVO40185_mezz.mov"]:map> 

此數據在選擇列表中以逗號分隔。

注意:我確實嘗試了傳遞@list而沒有@符號,但我得到了未識別的局部變量或方法,並且無法使代碼在添加@時運行。這就像一個數據集合,所以我期望它將它解釋爲一個數組。但不知道。

下面是部分文件代碼:

<p>   
     <label>Select Partial Test File List:</label><%= @list %><br /> 
     <% unless @list.nil? %> 
      <%= @list %> 
     <% else %> 
      <label> list is empty. </label> 
      <% @list = Dir.glob("/watchfolder/showtimevod/**/*.{mpg,mov}").map %> 
     <% end %> 
     <%= select_tag 'filepath', options_for_select(@list, @selected_filepath) %> 
    </p> 

它顯示後面的頁面上,我的名單是空的「始終顯示和下拉框與我的默認填充「硬編碼」命令行「/ watchfolder/showtimevod /'文件列表。

@selected_filepath將選定的行保留在列表中。

我不知道我在做什麼錯誤傳遞值部分。

+0

當您從'@ list'搶走了'@'在控制器中,你也把它遠離所有的部分中的'@ list'引用?你只給了我們一部分錯誤信息,所以它很不清楚。 – 2014-10-11 04:41:49

回答

0

在我的應用程序/指數,

什麼是 「應用程序/指數」?

有人可以請幫助建議我正確的方式來設置此?

正確的方法是要得到的東西先簡單的工作:

應用程序/控制器/ some_controller.rb

def file_dir 
    puts "****#{params[:dir_list]}" 
    @files = %w[ a b c] 

    render :partial => 'list_files', :locals => { file_names => @files } 
    end 

的意見/ some_controller/_list_files.htm。ERB:

<div> 

<%= file_names.each do |fname| %> 
<div><%= fname %></div> 
<% end %> 

</div> 

此外,與您所有的帖子,在這條線:

<%= select_tag(
     'filepath', 
     options_for_select(@list, @selected_filepath) %> 

@selected_filepath是不確定的。

這就像一個數據的集合,所以我期望它將它解釋爲 一個數組。但不知道。

您應該努力創建您理解的數據。什麼是你想用這行來完成:

@files = Dir.glob("#{@dir_path_choice}/**/*.{mpg,mov}").map 

以下行沒有做:

@files = Dir.glob("#{@dir_path_choice}/**/*.{mpg,mov}") 

此:

我曾嘗試通過@list無@符號,但我得到了 未識別的本地變量或方法,無法運行代碼以運行 而不添加@。

是不夠的。沒有人關心你對錯誤信息的解釋是什麼 - 人們關心的是EXACT錯誤信息,包括文件名和行號,複製並粘貼到你的文章中,以及錯誤引用的確切代碼。

如果你只是想獲得你的代碼工作,你可以這樣做:

應用程序/ some_controller.rb:

def file_dir 
    if params[:dir_list].nil? 
     @dir_path_choice = '/watchfolder/indemandvod' 
    else 
     @dir_path_choice = params[:dir_list] 
    end 

    @files = Dir.glob("#{@dir_path_choice}/**/*.{mpg,mov}").map 

    if @files.nil? 
     @files = Dir.glob("/watchfolder/hbovod/**/*.{mpg,mov}").map 
    end 

    render :partial => 'list_files', :locals => {file_names => @files } 
    end 

然而,增加地圖()到您的迪爾結束。 glob()沒有任何用處。

應用程序/視圖/ some_controller/_list_files.html.erb:

<p>   
    <label>Select Partial Test File List:</label> 
    <%= select_tag 'filepath', options_for_select(file_names) %> 
</p>