目前我在用户和照片之间有一个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
但我怎么应该嵌套的形式呢?如果应该可以一次上传多个图像?
答案 0 :(得分:0)
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 %>