ruby-on-rails – Rails:带嵌套和强力参数的照片上传(回形针)
发布时间:2020-12-16 19:11:43 所属栏目:百科 来源:网络整理
导读:背景: 我正在尝试使用带有Paperclip gem的Strong Params将照片上传添加到广告模型,其中Photo是一个单独的模型“has_attached_file”:upload,我在调用forms_for(实际上是semantic_forms_for,因为我正在使用Formtastic)广告#new视图将图像上传到Photo实例. P
背景:
我正在尝试使用带有Paperclip gem的Strong Params将照片上传添加到广告模型,其中Photo是一个单独的模型“has_attached_file”:upload,我在调用forms_for(实际上是semantic_forms_for,因为我正在使用Formtastic)广告#new视图将图像上传到Photo实例. Params看起来不错,但我想我在控制器中遗漏了一些东西.尽管多次迭代控制器代码,但仍无法使其工作.我需要做些什么才能让它发挥作用? 非常感谢任何提示或指示!谢谢 – 广告模型: class Ad < ActiveRecord::Base belongs_to :user ##edited out irrelevant associations has_many :photos,dependent: :destroy accepts_nested_attributes_for :photos,:allow_destroy => true default_scope { order("created_at DESC") } #validates_presence_of :user_id,:make,:model,:km,:year,:location end – 照片型号: class Photo < ActiveRecord::Base belongs_to :ad has_attached_file :upload,:styles => { :main => "600x500>",:thumb => "60x45>" },:default_url => "http://placehold.it/600x500&text=nice+wheels!" end AdsController class AdsController < ApplicationController def create @ad = Ad.new(ad_params) @ad.user_id = current_user.id @photo = @ad.photos.build if @ad.save redirect_to @ad else flash.alert="You were missing some super-important details. Try again" redirect_to new_ad_path end end private def ad_params ##excluded all attributes except nested upload attrib. for gist params.require(:ad).permit(photos_attributes: [upload: [:upload_file_name,:upload_content_type]]) end end 广告#新 <%= semantic_form_for @ad do |form| %> <!-- left out all other form fields --> <%= form.semantic_fields_for :photo do |photo| %> <%= photo.file_field :upload %> <% end %> <% end %> 提交操作后广告参数哈希(广告#create) {"location":"Abha","make":"Bentley","model":"","gear":"","km":"50","price_bid":"500","price_ask":"500","ac":"0","cd":"0","radio":"0","powersteering":"0","abs":"0","satnav":"0","cruise":"0","fwd":"0","convertible":"0","problem_1":"","problem_2":"","problem_3":"","description":"","photo":{"upload":{"original_filename":"mustang-290x218.jpg","content_type":"image/jpeg","headers":"Content-Disposition: form-data; name="ad[photo][upload]"; filename="mustang-290x218.jpg"rnContent-Type: image/jpegrn","tempfile":[]}}} 路线 resources :ads,only: [:new,:create,:show,:index,:edit,:destroy] do resources :comments,only: [:create,:destroy] resources :photos,:destroy] resources :favorite_ads,:destroy] resource :emails,only: :create end 解决方法
需要将表单指定为多部分才能使文件上载起作用:
<%= semantic_form_for @ad,:html => {:multipart => true} do |form| %> 此外,您不允许传递临时文件: params.require(:ad). permit(photos_attributes: [upload: [:upload_file_name,:upload_content_type,:tempfile] ]) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |