@zggb

Как рендерить ошибки?

Доброго дня. Никак не удается сделать проверку размера картинки, до отправки.

Имеется модель real_estate
has_many :pictures, dependent: :destroy
validate  :picture_size

def picture_size
    pictures.each do |img|
      if img.image_file_size > 5.megabytes
        errors.add(:pictures, "should be less than 5MB")
      end
    end
end


Имеется контроллер
def update
    @user = current_user
    @real = RealEstate.find(params[:id])

    if @real.update(real_params)
      if params[:images]
        # The magic is here ;)
        params[:images].each do |image|
          @real.pictures.create(image: image)
        end
      end
    redirect_to root_path
  else
    render 'edit'
  end
end


и

def create
  @user = current_user
  @real = current_user.real_estates.build(real_params)

  if @real.save
    if params[:images]
      # The magic is here ;)
      params[:images].each do |image|
          @real.pictures.create(image: image)
      end
    end

    #flash[:success] = "Real Estate created!"
    redirect_to root_path
  else
    render 'real_estates/new'
  end
end


и вот такой обработчик ошибки
<% if object.errors.any? %>
  <div id="error_explanation">
  <div class="alert alert-danger">
    The form contains <%= pluralize(object.errors.count, "error") %>.
  </div>
  <ul>
  <% object.errors.full_messages.each do |msg| %>
    <li><%= msg %></li>
  <% end %>
  </ul>
  </div>
<% end %>


В контроллере update ошибки через раз показываются, а в create совсем нет
Возможно дело в .build(real_params)
Я безуспешно пробовал заменить на .create(real_params)
Заранее благодарен!
  • Вопрос задан
  • 2243 просмотра
Пригласить эксперта
Ответы на вопрос 2
Jazzis
@Jazzis
кодер, геймер, переводчик и ещё кто-то
Мне кажется, в модель надо добавить before_create :check_picture_size. Таким образом проверка будет выполняться перед созданием картинки. Если хотите чтобы выполнялась перед сохранением, то замените на before_save.
Ответ написан
Комментировать
@4itosik
Я конечно могу ошибаться, но у Вас идет вначале проверка на валидации (if @real.save) и потом происходит сохранение изображений. При такой реализации картинки не должны сохраняться, но и ошибок об этом не будет.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы