rails carrierwave,一个用户有很多图像

我用了

rails: 4.2.9 ruby: 2.3.1p112 

我创建了用途,景点和attraction_photos模型。 我希望每个用户都有很大的吸引力,每个景点都有很多景点照片。 吸引创建是有效的,但attraction_photos是空的,文件不会上传成功。

的Gemfile

 gem 'carrierwave' gem 'mini_magick' 

吸引力照片迁移

 class CreateAttractionPhotos < ActiveRecord::Migration def change create_table :attraction_photos do |t| t.integer :attraction_id t.string :photo t.timestamps null: false end end end 

用户

 class User < ActiveRecord::Base has_many :attractions ... end 

引力

 class Attraction < ActiveRecord::Base belongs_to :user has_many :attraction_photos, dependent: :destroy accepts_nested_attributes_for :attraction_photos ... end 

Attraction_photo

 class AttractionPhoto < ActiveRecord::Base belongs_to :attraction mount_uploader :photo, AttractionImageUploader end 

AttractionImageUploader

 class AttractionImageUploader < CarrierWave::Uploader::Base include CarrierWave::MiniMagick storage :file def store_dir "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" end process resize_to_fit: [800, 800] version :thumb do process resize_to_fit: [200, 200] end version :medium do process resize_to_fill: [400, 400] end def extension_whitelist %w(jpg jpeg gif png) end end 

attractions_controller

  def new @attractions = Attraction.new @attraction_photos = @attractions.attraction_photos.new end def create @attractions = current_user.attractions.build(attraction_params) if @attractions.save flash[:success] = "success" redirect_to attractions_path else flash[:danger] = @attractions.errors.full_messages render action: :new end end private def attraction_params params.require(:attraction).permit(:name, :longitude, :latitude, :address, :phone, :category_id, attraction_photos: [:photo]) end 

吸引力new.html.erb

  

我建议你使用https://github.com/nathanvda/cocoon

但如果你不想使用gem:

  • 你应该使用嵌套的表单助手http://guides.rubyonrails.org/form_helpers.html#nested-forms

像这样:

 <%= f.fields_for :attraction_photos do |att_photo| %> <%= att_photo.label :photo %> <%= att_photo.file_field :photo %> <% end %> 
  • 请记住在新控制器的操作中构建吸引力照片。 @attraction.attraction_photos.build

  • 您应该将来自attraction_photos: [:photo]允许参数修改为attraction_photos_attributes: [:id, :photo]