【发布时间】:2016-02-07 16:38:35
【问题描述】:
在我的应用程序/索引中,用户从下拉列表中选择位置和目录路径。 onchange 事件调用名为 file_dir 的控制器,它获取路径,执行命令行调用,将该目录中的文件列表传递回参数@files。然后我渲染一个将这个@files 传递给局部变量的部分。然后在部分选择标签将显示传递给它的文件列表。
我是 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引用中删除了它?你只给了我们部分的错误信息,所以很不清楚。
标签: ruby-on-rails-4 drop-down-menu partials local-variables