Загрузка нескольких фотографий в Cloudinary с Carrierwave загружает только одну фотографию - PullRequest
0 голосов
/ 27 ноября 2018

Я долго искал ответ, но пока ничего не помогло.Я следовал руководству на странице Github для Carrierwave (https://github.com/carrierwaveuploader/carrierwave/blob/master/README.md#multiple-file-uploads). Точно так же, как инструкции (замена пользователя для ресторана и аватара для фотографии), у меня есть следующее (я использую Rails 5.2.1):

rails g migration add_photos_to_restaurant photos:json

# app/models/restaurant.rb
class Restaurant < ApplicationRecord
  belongs_to :user
  mount_uploaders :photos, PhotoUploader
end


# app/views/restaurants/_form.html.erb
<div class="container" style="margin-bottom: 200px;">
  <div class="row">
    <div class="col-xs-6 col-sm-offset-3">
      <div class="form-inputs">
        <%= simple_form_for(@restaurant) do |f| %>
          <% if @restaurant.errors.any? %>
            <ul>
              <% @restaurant.errors.full_messages.each do |message| %>
              <li>
                <%= message %>
              </li>
              <% end %>
            </ul>
          <% end %>
          #[...]
          <%= f.file_field :photos, multiple: true %>
      </div>
      <div class="form-actions">
          <%= f.submit class: "btn btn-success" %>
          <%= link_to 'Back', restaurants_path, class: "btn btn-primary" %>
      </div>
    </div>
        <% end %>
  </div>
</div>


# app/controllers/restaurants_controller.rb
class RestaurantsController < ApplicationController
  skip_before_action :authenticate_user!, only: [ :index, :show ]
  before_action :set_restaurant, only: [ :show, :edit, :update, :destroy ]

  def index
    @restaurants = Restaurant.all
  end

  def show
  end

  def new
    @restaurant = Restaurant.new
  end

  def create
    @restaurant = Restaurant.new(restaurant_params)
    @restaurant.user = current_user
    if @restaurant.save
      redirect_to restaurant_path(@restaurant)
    else
      render :new
    end
  end

  def edit
  end

  def update
    if @restaurant.update(restaurant_params)
      redirect_to restaurant_path(@restaurant)
    else
      render :edit
    end
  end

  def destroy
    @restaurant.destroy
    redirect_to restaurants_path
  end

  private

  def set_restaurant
    @restaurant = Restaurant.find(params[:id])
  end

  def restaurant_params
    params.require(:restaurant).permit(
      #[...],
      {photos: []}
      )
  end
end

Что я получаю, когда делаю, так это то, что в ресторане сохраняется только первая фотография, но в Cloudinary я получаю все фотографии.

Еще одна вещь, которую я могу 't использовать тег tag-as-tagable с этим, потому что если я получаю, я получаю эту ошибку:

PG::UndefinedFunction: ERROR:  could not identify an equality operator for type json
LINE 1: ..., restaurants.created_at, restaurants.updated_at, restaurant...

Это как-то связано с таблицей ресторанов с фотографиями в виде столбца json. Не найденолибо обойти это. Я хотел бы, чтобы я мог продолжать использовать Acts как taggable, потому что это очень полезно для сайта типа, который я создаю. Так что сейчас я должен был закомментировать все, что связано с этим драгоценным камнем.

Может кто-нибудь помочь мне выбраться из этого беспорядка? Я был бы очень признателен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...