2013-10-01 3 views
1

Если у меня есть модель, которая поддерживает мягкие удаления (для стандартных пользователей) и жесткие удаления (для администраторов), какой наилучший наилучший подход к маршрутизации?Rails мягкие и жесткие действия удаления

Имеет ли смысл обрабатывать оба запроса под тем же действием удаления в контроллере с логикой в ​​методе или имеет смысл иметь разные маршруты?

Является ли мягкое удаление технически рассмотренным действием delete?

Я знаю, что это слишком много, но любые советы будут оценены.

ответ

2

Я бы, вероятно, поставил условное заявление в рамках одного действия. Таким образом, это прозрачно для пользователя, и нет никакого способа, пользователь может взломать метод уничтожения путем угадывания удаления URL и разместить на нем:

# DELETE /thing/1 
# DELETE /thing/1.json 
def destroy 
    @thing = Thing.find(params[:id]) 

    if current_user.admin? and !params[:soft_delete] 
    @thing.destroy 
    else 
    @thing.soft_delete 
    end 

    respond_to do |format| 
    format.html { redirect_to things_url } 
    format.json { head :no_content } 
    end 
end 

# views/things/show.html.erb 
<%= button_to("Delete", thing_url(@thing), method: :delete) %> 
<%= button_to("Soft Delete", thing_url(@thing, soft_delete: true), method: :delete) %> 
+0

Мне это нравится, но что, если администратору нужна опция для мягкого и жесткого удаления? – DrMavenRebe

+1

Вы можете 'if current_user.admin? и! params [: soft_delete] '. Тогда, на ваш взгляд, у вас может быть кнопка типа '<% = button_to (« Soft Delete », thing_url (@thing, soft_delete: true), method:: delete)%>', которая передаст параметр 'soft_delete'. – mysmallidea

0

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

Использование действия DELETE для обеих операций в порядке. С точки зрения клиента это просто что-то удаляет (нет необходимости знать, мягко или сложно).

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