Ответы пользователя по тегу Sinatra
  • (Sinatra) Как загружать несколько изображений в CarrierWave?

    Без дополнительной таблицы обойтись может быть и можно, но решение будет слишком сложным. Поэтому нужно сделать таблицу post_attachments, в миграции связать с постами и естественно нужно поле image, должно получиться что-то вроде:

    Сlass CreatePostAttachment < ActiveRecord::Migration
      def change
        create_table :post_attachments do |t|
          t.references :post, index: true
          t.string :image
          t.timestamps null: false
        end
        add_foreign_key :post_attachments, :posts
      end
    end


    Раз уж вы пользуетесь чистым html, то вьюха должна получиться примерно такой, могу ошибиться, привык к haml:

    <label for="post_image">Выберите одну  или несколько фотографий</label>
    <div class="field">
    <input multiple="multiple" name="post_attachments[image][]" type="file" id="post_attachments_image">
    </div>


    Контроллер:

    if @post.save
      unless params[:post_attachments].blank?
              params[:post_attachments]['image'].each do |a|
                @post.post_attachments.create!(:image => a)
              end
      redirect :"/"
      ....


    @post.image = params[:image] и соответствующее поле соответственно нужно убрать из постов.

    В моделях:
    class PostAttachment < ActiveRecord::Base
      mount_uploader :image, ImagesUploader
      belongs_to :post
    end
    
    class Post < ActiveRecord::Base
      has_many :post_attachments, :dependent => :destroy
    end
    Ответ написан
  • (Sinatra + CarrierWave) Почему не загружается изображение?

    не знаю синатру, но что вижу у вас
    class Post < ActiveRecord::Base
      mount_uploader :image, 
    end

    что вижу в документации к CarrierWave:
    class User < ActiveRecord::Base
      mount_uploader :avatar, AvatarUploader
    end


    после "@post = Post.new(params[:post])" попробуем добавить "@post.image = params[:image]"
    Ответ написан