В моем приложении/индексе пользователь выбирает местоположение и путь к каталогу из раскрывающегося списка. Событие onchange вызывает контроллер с именем file_dir, где он берет путь, выполняет вызов командной строки, возвращая список файлов в этом каталоге в параметр @files. Затем я частично передаю эти @files в локальную переменную. Затем в партиале тег select будет отображаться со списком переданных ему файлов.
Я новичок в ROR и не смог успешно передать читаемую локальную переменную. к частичному. Все отлично работает с жестко заданной строкой, но не с локальной переменной.
Может кто-нибудь, пожалуйста, помогите мне посоветовать правильный способ настроить это?
Вот метод, вызываемый из первого прохода раскрывающегося списка onchange, который получает каталог:
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 я проверил строку @files = Dir.glob("#{@dir_path_choice}/**/*.{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 поддерживает выбранную строку в списке.
Я не знаю, что я делаю неправильно при передаче значений частичным.
@
из@list
в контроллере, вы также удалили его из всех ссылок@list
в партиале? Вы предоставили нам только часть сообщения об ошибке, так что оно очень неясно. - person Chris Peters   schedule 11.10.2014