Ruby on rails 3.2 使用CarrierWave、SimpleForm、InheritedResources和多态关联上载文件

Ruby on rails 3.2 使用CarrierWave、SimpleForm、InheritedResources和多态关联上载文件,ruby-on-rails-3.2,carrierwave,simple-form,inherited-resources,Ruby On Rails 3.2,Carrierwave,Simple Form,Inherited Resources,我在使用多态性使嵌套属性处理文件上载时遇到问题。以下是我的应用程序中的相关源CDE app/uploaders/image_uploader.rb # encoding: utf-8 class ImageUploader < CarrierWave::Uploader::Base include CarrierWave::RMagick storage :file version :thumb do process resize_to_fill: [50, 50]

我在使用多态性使嵌套属性处理文件上载时遇到问题。以下是我的应用程序中的相关源CDE

app/uploaders/image_uploader.rb

# encoding: utf-8

class ImageUploader < CarrierWave::Uploader::Base
  include CarrierWave::RMagick
  storage :file

  version :thumb do
    process resize_to_fill: [50, 50]
    process convert: 'jpg'
  end

  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end
end
上面的表单可以工作,但是传递:imageable_id和:imageable_type对我来说有点黑客味,很容易导致大规模分配安全问题。另外,这需要我有一个在照片中可访问的属性和一个photos_controller.rb以及到:photos的RESTful路由。这一切似乎都大错特错

这是我的原始形式,感觉更像Rails的方式,但它不起作用。似乎多态性关联在某种程度上起了干扰作用。我认为photos属性应该与params[:list]一起发布,而不是单独的params[:photo]

app/views/listings/_form.html.haml

%p
  %b Photos:
  %ul.inline
    - @listing.photos.each do |photo| 
      %li= link_to(image_tag(photo.image_url(:thumb)), photo.image_url)

= simple_form_for @listing.photos.new do |f|
  = f.hidden_field :imageable_id
  = f.hidden_field :imageable_type
  = f.input :image, as: :file
  = f.submit 'Upload'
= simple_form_for @listing do |f|
  = simple_fields_for :photos, @listing.photos.new do |pf|
    = pf.input :image, :as => :file
  = f.submit 'Upload'
有人能告诉我正确的方法吗

class Listing < ActiveRecord::Base
    attr_accessible :photos_attributes
    has_many :photos, :as => :imageable, :dependent => :destroy
    accepts_nested_attributes_for :photos
    mount_uploader :logo, ImageUploader
end
%p
  %b Photos:
  %ul.inline
    - @listing.photos.each do |photo| 
      %li= link_to(image_tag(photo.image_url(:thumb)), photo.image_url)

= simple_form_for @listing.photos.new do |f|
  = f.hidden_field :imageable_id
  = f.hidden_field :imageable_type
  = f.input :image, as: :file
  = f.submit 'Upload'
= simple_form_for @listing do |f|
  = simple_fields_for :photos, @listing.photos.new do |pf|
    = pf.input :image, :as => :file
  = f.submit 'Upload'