2013-07-22 4 views
0

У меня есть User модель со следующей ассоциации:Предельное количество изображений - Скрепка

class User < ActiveRecord 
    has_many :pictures, :as => :imageable 
    accepts_nested_attributes :pictures 
end 

Моя Picture модель выглядит следующим образом:

class Picture < ActiveRecord 
    belongs_to :imageable, :polymorphic => true 
    has_attached_file :image 
end 

Теперь я хочу, чтобы пользователь мог загрузить максимум 5 изображений. И он выберет 1 изображение в качестве своего аватара. Теперь пользователь может загружать изображения, но я не знаю, как ограничить максимальное количество изображений. Еще одна вещь, пользователь должен иметь возможность изменить свое изображение аватара. Как я могу это достичь?

На мой взгляд, я использую входной файл с именем user[picture_attributes][0][image], чтобы пользователь мог изменить первое изображение, но он сохраняет вставки новых изображений в базу данных вместо замены первого изображения.

Пожалуйста, помогите мне в этом.

Заранее спасибо

ответ

1

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

Ваша модель картина будет, таким образом, стать:

class Picture < ActiveRecord::Base 
    belongs_to :imageable, :polymorphic => true, counter_cache: true 
    has_attached_file :image 
end 

Кроме того, необходимо будет добавить столбец pictures_count в модели пользователя.

Таким образом, в вашем контроллере вы можете проверить, имеет ли счет до 5 записей и, следовательно, информирует их о том, что они загрузили максимально допустимое значение.

if @user.pictures.size == 5 #sorry no more uploads 

Для второй части проблемы. Является ли действие формы указаным на действие new/create или ваше действие обновления. Если указано новое действие, будет создана новая запись, но если указать на действие обновления, она должна изменить первую запись изображения, как вы ожидаете.

@charinten Для второй части этой проблемы, некоторые предложения:

  1. Вы могли бы попробовать сделать идентификатор фотографии, доступной в модели пользователя. Таким образом, когда вы пытаетесь указать на изображение для использования в качестве аватара, рельсы используют этот идентификатор для обновления записи. Если вы попытаетесь обновить запись, не указывая направляющие на этот идентификатор, предполагается, что вы пытаетесь создать новую запись.
  2. Также, вместо использования пользователем [picture_attributes] [0] [изображения] вы могли бы в своем профиле пользователя. Найдите определенное изображение и укажите его на действие редактирования.

Надеется, что это помогает

+0

Привета. Я не знаю, почему, но моя форма предназначена для метода обновления и продолжает вставлять новые изображения в базу данных. –

+0

Если бы вы могли вставить фрагмент кода в своем представлении, а также ваш метод обновления, я бы посмотрел, как я могу помочь в этом. Также я не понимаю, почему вы сделали бы этого пользователя [picture_attributes] [0] [image]. –

+0

На самом деле, это устаревший код от предыдущего разработчика. Насколько я понимаю, он хочет использовать первую картинку в качестве аватара для пользователя. –

Смежные вопросы