在Rails中迭代创建多个文件输入字段

时间:2012-11-20 21:53:44

标签: ruby-on-rails ruby forms file-upload

我在数据库中有一列产品视图(例如顶部,底部,正面,背面)。我正在尝试生成一系列文件输入,以允许用户为每个视图上传图像。这是我追求的结果:

...
<label>Top</label>
<input type="file" name="image[Top]"><br>
<label>Bottom</label>
<input type="file" name="image[Bottom]"><br>
<label>Front</label>
<input type="file" name="image[Front']"><br>
...

这就是我正在尝试的:

<%= views = View.order('name ASC').all.map { |view| [view.name, view.id] } %>
<%= views.each { |view| label(view); file_field('image', view) } %>

然而,所有这一切都是打印出views数组几次。希望你的Rails专家可以指出我正确的方向。 (如果我正在屠杀Ruby,我会事先道歉。)

1 个答案:

答案 0 :(得分:2)

我建议将你的逻辑从视图中移到控制器或辅助方法中。你的views_controller.rb:

@views = View.all.order('name ASC')

这为您提供了一组实例对象,这意味着您只需通过以下方式访问视图名称:

@views.each do |v|
   var = v.name
# other code for iterating on View ...
end

现在,在您的视图中(应该是form_for或form_tag,以便您可以选择图片并上传它们),您可以:

<%= form_for(@catalogue) do |f| %>
  <%= @views.each do |v| %>
    <%= f.label v.name %>    < br/ >  
    <%= f.file_field v.name %>
  <% end %>

  <% f.submit %>

<% end %>