Рельсовая маршрутизация devise_for / resources CRUD перекрывается - PullRequest
0 голосов
/ 04 июня 2011

У меня есть устройство, работающее для моего класса User, и я пытаюсь добавить некоторые методы CRUD в контроллер пользователя. Я читал о маршрутизации для этого, и пока devise_for предшествует resources, он будет иметь приоритет, иначе вы будете получать доступ к несуществующим записям только через / users / sign_in или как угодно. Во всяком случае.

У меня работают методы CRUD и даже некоторые ресурсы. Скажем, у пользователей много вещей. Я могу просматривать владения через / users / 1 / обладаний / 1, но когда я пытаюсь удалить их, у меня нет доступа к методу Devise current_user. Я мог бы удалить, посмотрев пользователя с помощью params [: user_id], а затем обнаружив его имущество по параметрам [: id], но это не совсем безопасно, если я только хочу, чтобы вошедший в систему пользователь мог удалить свои собственные вещи .

Как я могу использовать методы Devise из методов CRUD моей пользовательской модели?

Ответы [ 2 ]

0 голосов
/ 04 июня 2011

Лучшая практика может заключаться в том, чтобы не вкладывать маршрут владений под пользователем, вместо этого использовать его самостоятельно как /possessions/1 и в вашем контроле владений, чтобы охватить все ваши находки с помощью current_user, то есть:

def index
  @possessions = current_user.possessions
end

def edit
  @possession = current_user.possessions.find(params[:id])
  ...
end

Таким образом, вы можете быть уверены, что пользователь когда-либо сможет видеть только свои собственные предметы, и он получит 404, если попытается получить доступ к чужому имуществу.

Унаследованные ресурсы делает это действительно простым, поэтому вы можете кодировать свои контроллеры следующим образом:

class ProjectsController < InheritedResources::Base
  protected
    def collection
      @projects ||= end_of_association_chain.paginate(:page => params[:page])
    end
end
...