form_for @ item.subitem.new

时间:2012-12-03 21:02:05

标签: ruby-on-rails

我有上传图片的表单。

<%= form_for Picture.new do |f| %>
    <%= f.label :file, "Upload Pictures: " %>
    <%= f.file_field :file, multiple: true, name: "picture[file]" %>
    <%= f.submit %>
<% end %>

我现在正在尝试在这个模型和另一个名为Item的模型之间建立一个has_many连接(Item有很多图片),并为这两个模型提供一个表单。

我认为我所要做的就是这样:

<%= form_for(@item) do |f| %>

  <div class="field">
    <%= f.label :title %><br />
    <%= f.text_field :title %>
  </div>
  <div class="field">
    <%= f.label :keywords %><br />
    <%= f.text_field :keywords %>
  </div>

  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

 # and here goes the same form, just @item.pictures.new instead of Picture.new

<%= form_for(@item.pictures.new) do |f| %>
    <%= f.label :file, "Upload Pictures: " %>
    <%= f.file_field :file, multiple: true, name: "picture[file]" %>
    <%= f.submit %>
<% end %>

但是当我提交图像时使用此表单 - 它不会将item_id分配给图片。 (我确实写了has_many和belongs_to)。

我是否需要手动传递item_id? (不要认为这是个好主意,因为我需要确保他们不会尝试将图片上传到他们不拥有的某些项目中)

1 个答案:

答案 0 :(得分:0)

以防万一有人好奇 - 我通过将item_id传递给图片来解决它:

<%= form_for Picture.new do |f| %>
    <%= f.label :file, "Upload Pictures: " %>
    <%= f.hidden_field :item_id, :value => @item.id %>
    <%= f.file_field :file, multiple: true, name: "picture[file]" %>
    <%= f.submit %>
<% end %>

并在图片模型中确保current_user拥有具有此id的项目。