Я использую драгоценный камень CarrierWave, и у меня есть столбец avatar_id
в таблице Users и таблице Photos, в которой есть столбец id
и user_id
. Есть ли способ настроить так, чтобы первая фотография, загруженная пользователем, была назначена их avatar_id
?Как сделать первый загруженный фото аватара пользователя
Например, я зарегистрироваться в качестве пользователя 56. Я загрузить свою первую фотографию (ID 89) и мои avatar_id
обновления столбца с идентификатором 89.
Фотографии Контроллер:
def new
@photo = Photo.new
end
def create
@photo = Photo.new(params[:photo])
@photo.user = current_user
if @photo.save
flash[:notice] = "Successfully created photos."
redirect_to :back
else
render :action => 'new'
end
end
def resize(width, height, gravity = 'Center')
manipulate! do |img|
img.combine_options do |cmd|
cmd.resize "#{width}"
if img[:width] < img[:height]
cmd.gravity gravity
cmd.background "rgba(255,255,255,0.0)"
cmd.extent "#{width}x#{height}"
end
end
img = yield(img) if block_given?
img
end
end
def edit
@photo = Photo.find(params[:id])
end
def update
@photo = Photo.find(params[:id])
if @photo.update_attributes(params[:photo])
flash[:notice] = "Successfully updated photo."
redirect_to @photo.gallery
else
render :action => 'edit'
end
end
def destroy
@photo = Photo.find(params[:id])
@photo.destroy
flash[:notice] = "Successfully destroyed photo."
redirect_to @photo.gallery
end
def avatar
if current_user.update_attribute(:avatar_id, params[:id])
flash[:notice] = "Successfully made Avatar."
else
flash[:notice] = "Avatar failed"
end
redirect_to(current_user)
end
end
Вы определенно должны принять второй подход. Во-первых, это просто уродливый ... –
@MichaelSzyndel Второй подход отличается только двумя способами: во-первых, это условие находится в одной строке, а во-вторых, оно проверяет 'avatar.blank?' Vs '.photos.size' , Способ очистки этого кода - это то, что я рекомендовал в начале своего ответа. ;) – coreyward
Проверка размера - вот почему я считаю первое решение уродливым - для этого требуется дополнительный SQL-запрос. Насколько я понимаю вопрос OP, если нет аватара, установите первую фотографию как аватар. Но мы будем выполнять это только при сохранении, ergo, во время первой загрузки. Если вы минимизируете множество возможных переменных, вы получаете второе решение! :) –