0

我有一个 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);

我该怎么办?请问我是否没有解释清楚。

4

1 回答 1

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]
于 2013-06-21T14:47:08.860 回答