1

目前我在用户和照片之间有一个 has_one 关系。

User model:
has_one :photo
accepts_nested_attributes_for :photo
Photo model:
  belongs_to :user
  Paperclip.options[:command_path] = "/usr/local/bin"
  has_attached_file :image,
          :path => ':rails_root/public/images/ads/:id/:basename.:extension',
          :url  => "images/ads/:id/:basename.:extension"

嵌套形式:

 <%= f.simple_fields_for :photo_attributes, :html => { :multipart => true } do |d| %>
    <%= d.input :billed_navn %>
    <%= d.label :image, :label => 'Upload logo', :required => false  %>
    <%= d.file_field :image, :label => 'Image', :class => 'imagec', :required => 'false', :style => 'margin-bottom:2px;float:left;width:250px;'  %>
    <input type="button" value="Clear" id="clear" style="width:70px;float:left;margin-right:2px;">
    <%= d.input :image_url, :label => 'Billed URL', :input_html => { :class => 'imagec'}, :required => false %>
    <%= f.label :image, :label => 'Billed preview', :required => false  %><div id="preview"></div>
<% end %>

此设置正常工作,我可以上传 1 张照片。我的用户能够一次上传多张照片。

因此,我已将 useres 模型中的关联更改为:

User model:
has_many :photos
accepts_nested_attributes_for :photos

但是我应该如何嵌套形式呢?如果应该可以一次上传多个图像?

4

1 回答 1

1

Accepts_nested_attributes_for 只允许批量分配一次添加多张照片。(当心批量分配安全漏洞!推荐使用strong_parameters gem)。这意味着更新操作接受多张照片。

只有在发送时才会添加它,如果用户填写表单中的字段,就会发生这种情况。这主要由编辑视图决定。

因为您不知道用户想要添加多少张照片,所以最好的方法是使用 javascript 在用户请求时为照片动态添加一组额外的字段。这可以是一个链接,单击该链接会将字段附加到表单中。这样,用户可以一次提交任意数量的照片。

您还需要进行一些验证,以便在提交一组空字段(用于照片)时,不会添加非照片照片。

如果您不想使用 javascript,那么您可以做的最好的事情就是假设用户一次最多上传 3 个,并包含 3 组照片字段。再次,小心适当地处理空字段。


例子:

<% (1..5).each do |I| %>
  <%= fields_for "user[photo_attributes][]", nil, :index => I do |form| %>
    <%= form.input :billed_navn %>
    ...
  <% end %>
<% end %>
于 2012-09-01T14:00:32.440 回答