【问题标题】:Paperclip and Cocoon, images not saved回形针和茧,图像未保存
【发布时间】:2014-03-12 02:50:13
【问题描述】:

我有物品模型

class Item < ActiveRecord::Base
  has_many :images, dependent: :destroy
  accepts_nested_attributes_for :images, :allow_destroy => true
end

和图像模型

class Image < ActiveRecord::Base
  belongs_to :item
  has_attached_file :picture, :styles => {:medium => "600x600>", :thumb => "100x100>"},       :default_url => "/images/:style/missing.png"
end

而在控制器中,强参数去

def item_params
  params.require(:item).permit(:name, :description, :price, images_attributes: [:picture, :_destroy])
end

正如 Cocoon READM 所说。 所以基本思想是一个项目有几个图像,而这些图像又具有这个回形针字段picture。然后用 Coccon 渲染表单

#views/admin/items/new.html.erb
<div class="field">
  <div class="ui teal label">Imagen</div>
  <%= f.fields_for :images do |image| %>
    <%= render partial: 'image_fields', :f => image  %>
  <% end %>
</div>

#views/admin/items/_image_fields.html.erb
<div class="nested-fields">
  <%= f.file_field :image, :class => "add-image-field" %>
  <%= link_to_remove_association "Eliminar", f, :class => "ui red mini button" %>
</div>

在视图中似乎一切正常,但再查看发送到控制器的参数,有些问题:

Parameters: {"utf8"=>"✓",
"authenticity_token"=>"AIogvRQuKNrAAOjM7YsnVQx7j2MwZ1VC3LiZy0cDDrU=", 
"item"=>{
  "name"=>"", 
  "description"=>"", 
  "price"=>"12345", 
  "images_attributes"=>{
    "1394577880921"=>{
      "image"=>#<ActionDispatch::Http::UploadedFile:0x00000003182718 @tempfile=#<Tempfile:/tmp/RackMultipart20140311-27326-19i0obp>, @original_filename="blue-diamond-rings.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"item[images_attributes][1394577880921][image]\"; filename=\"blue-diamond-rings.jpg\"\r\nContent-Type: image/jpeg\r\n">, "_destroy"=>"false"}}}, 
 "commit"=>"Crear"}

images_attributes 后面那个奇怪的签名是什么?它正在破坏项目保存过程。

感谢您的指点!

【问题讨论】:

    标签: ruby-on-rails paperclip nested-attributes cocoon-gem


    【解决方案1】:

    你调用file_field image,它应该是picture

    其他都还好。

    image_attributes里面的“奇怪”是什么:

    • “1394577880921”:临时id,存入数据库时​​会替换为真实id。这就是 rails 处理嵌套属性的方式。在解析发布的参数时,rails 会将其转换为 Images 的数组。
    • image(应该命名为picture)的值是文件数据,当然看起来很奇怪

    【讨论】:

    • 非常感谢,就是这样。顺便说一句,伟大的宝石!
    • @nathanvda,如果我想显示上传图片的预览,我应该怎么做?我能拿到这个临时身份证吗?
    猜你喜欢
    • 1970-01-01
    • 2013-06-25
    • 1970-01-01
    • 2018-05-14
    • 1970-01-01
    • 1970-01-01
    • 2011-05-02
    • 2016-03-31
    相关资源
    最近更新 更多