我从下拉框中传递一个选定的目录,并将目录路径传递给部分中的第二个下拉框,我计划对此值进行插值并正确运行Dir.glob命令,然后显示可用文件。目录已选中。
我无法使插值正常工作。一种方法是使用#{}和变量。这种风格在我的控制器中工作,但是我无法将值数组传递给我的部分(新到rails并且还在学习所有你可以做的事情)。
我在我的部分尝试了erb,我认为可能有效,但是我收到错误并且列表没有显示:无法将nil转换为字符串,而且它是在表单帖子后页上对选择框值的解释。 'evaluate_media将'index'呈现为post。
以下是ERB的部分内容:
require 'erb'
<p>
<label>Select Partial Test File:</label><br />
<label>Dir Partial Selected Path Choice: </label><%= dir_path_choice %><br />
<%= dir_path_choice = params[:dir_list] %>
<label>Partial Path Choice: </label><%= @dir_path_choice %><br />
<% if dir_path_choice %>
<% @dir = 'Dir.glob("' << @dir_path_choice << '/**/*.{mpg,mov}").map' %>
<% else %>
<% dir = 'Dir.glob('"/watchfolder/miniprod/hot/**/*.{mpg,mov}"').map' %>
<% end %>
<label>Partial Dir: </label><%= @dir %><br />
<% template = ERB.new dir %>
<% @files = template.result %>
<%= select_tag 'filepath', options_for_select(@files, @selected_filepath) %>
</p>
这是有效的字符串赋值,但是是硬编码的:
<% @files = Dir.glob("/watchfolder/showtimevod/**/*.{mpg,mov}").map %>
<%= select_tag 'filepath', options_for_select(@files, @selected_filepath) %>
以下是与硬代码一起使用的完整部分,并且在显示中显示两个值在其值中是正确的: @dir_path_choice(包含传递的目录路径。 @dir(是要执行的完整Dir.glob字符串。)
<p>
<label>Select Partial Test File:</label><br />
<label>Dir Partial Selected Path Choice: </label><%= dir_path_choice %><br />
<%= @dir_path_choice = params[:dir_list] %>
<label>Partial Path Choice: </label><%= @dir_path_choice %><br />
<% if @dir_path_choice %>
<% @dir = 'Dir.glob("' << @dir_path_choice << '/**/*.{mpg,mov}").map' %>
<% else %>
<% @dir = 'Dir.glob('"/watchfolder/miniprod/hot/**/*.{mpg,mov}"').map' %>
<% end %>
<label>Partial Dir: </label><%= @dir %><br />
<% @files = Dir.glob("/watchfolder/showtimevod/**/*.{mpg,mov}").map %>
<%= select_tag 'filepath', options_for_select(@files, @selected_filepath) %>
</p>
这是控制器使用值:
重新显示部分 def file_dir
@dir_path_choice = params[:dir_list]
# @files = "#{@dir}"
# @files = "Dir.glob(#{@dir_path_choice}/**/*.{mpg,mov}).map"
# render :partial => 'list_files', :collection => @files, :as :item
render :partial => 'list_files', :locals => {:dir_path_choice => @dir_path_choice }
end
end
答案 0 :(得分:0)
require 'erb'
您不需要在视图或部分中使用erb。 erb是rails的默认模板语言。
在你的部分内容中,你试图访问params hash:
<%= dir_path_choice = params[:dir_list] %>
我不知道你能做到这一点,但是当我尝试它时,我能够部分地访问params哈希。我不知道为什么这对你不起作用,但在任何情况下都不是好的做法。
将以下行添加到views / layouts / application.html.erb文件中会很有帮助:
<%= debug(params) if Rails.env.development? %>
这样每个页面都会显示params哈希中的内容。你可以把它放在关闭的body标签之前。如果需要,可以使用此css设置调试输出的样式:
.debug_dump { //rails automatically wraps the debug info in a <pre> tag with class="debug_dump"
clear: both;
float: left;
width: 100%;
margin-top: 45px;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
...您可以将其放入assets / stylesheets / custom.css中。
然后加载给您带来麻烦的页面并查看调试信息以查看dir_list
是否有值。
如果params [:dir_list]有值,那么你可以尝试以下几点:
:locals => {:dir_path_choice => @dir_path_choice}
,部分名为dir_path_choice
的部分应该有一个局部变量,其中包含您想要的内容。如果params [:dir_list]没有值,那么您提交行动的任何表格都会出现问题。
此外,这个红宝石代码都没有:
<%= dir_path_choice = params[:dir_list] %>
<label>Partial Path Choice: </label><%= @dir_path_choice %><br />
<% if dir_path_choice %>
<% @dir = 'Dir.glob("' << @dir_path_choice << '/**/*.{mpg,mov}").map' %>
<% else %>
<% dir = 'Dir.glob('"/watchfolder/miniprod/hot/**/*.{mpg,mov}"').map' %>
<% end %>
<label>Partial Dir: </label><%= @dir %><br />
<% template = ERB.new dir %>
<% @files = template.result %>
...与生成html有关,因此它不应该在视图中 - 它应该在控制器中。此外,当你这样做时:
template = ERB.new dir
ERB.new()的参数必须是包含erb的字符串,例如
"<div><%= greeting %></div>"
然后你可以这样做:
require 'erb'
str = "<div><%= greeting %></div>"
greeting = "hello world"
my_erb = ERB.new(str)
puts my_erb.result #=><div>hello world</div>
但你为什么要这样做呢?
你的dir变量,如上所述,需要是erb代码,在这里设置:
dir = 'Dir.glob('"/watchfolder/miniprod/hot/**/*.{mpg,mov}"').map
然而,这条线路没有任何问题。事实上,我甚至都不知道那是什么。如果我尝试匹配报价,我会得到:
dir = 'Dir.glob(' "/watchfolder/miniprod/hot/**/*.{mpg,mov}" ').map
前两个单引号创建一个字符串;接下来的两个双引号会创建另一个String,然后是什么:').map
?即使您将所有引号都匹配起来,String也不会有map()方法。你应该在那一行得到1000个错误。
最后,当您发布错误消息时,您对错误消息的解释是无关紧要的:人们需要看到的是复制和粘贴的EXACT错误消息,包含行号和文件名。 Rails错误消息很长,所以你可以从前15行开始,它应该像这样引用:
用户/ 7stud / rails_projects / sample_app2 /应用/控制器/ static_pages_controller.rb:3: 未终止的字符串符合文件末尾 /Users/7stud/rails_projects/sample_app2/app/controllers/static_pages_controller.rb:3: 语法错误,意外的输入结束,期待keyword_end