我有一个obj @files,有时包含一组数据(一个文件),有时它包含许多文件。
我有一个create.js.erb,这就是我现在所做的。
<% if @files.new_record? %>
alert("Failed to upload: <%= j @files.errors.full_messages.join(', ').html_safe %>");
<% else %>
$(".container").append('<div id="cfile"><%= j render(@files) %></div>');
<% end %>
然后我有一个名为_file.html.erb的部分
<%= file.name %>
<%= file_.id %>
这一切都运行正常,但我在尝试为不同类型的文件创建部分时遇到问题。
我希望能够做一些像
这样的事情if file.first.type == image # (Even If the come in groups they would be the same type so i just need one .type field from one of them.)
$(".different_container").append(render different partial here);
else if file.first.type == doc
$(".another_container").append(render another partial here);
我该怎么做? 请问我是否没有清楚地解释过。
答案 0 :(得分:1)
所以问题是@files可以是多个项目或单个项目。在您访问它之前,您可以将其包装在Array()
中,如下所示:
file_type = Array(@files).first.type
if file_type == :something
elsif file_type == :something_else
end
Array()
的作用是尝试将传递给它的参数转换为数组。如果将单个对象传递给它,它将返回一个包含该对象的数组。如果你传递一个数组,它什么都不做。
>> Array(1) # => [1]
>> Array(Object.new) # => [Object]
>> Array([1,2,3]) # => [1,2,3]