Pundit: правильный способ получить доступ на основе столов - PullRequest
0 голосов
/ 11 сентября 2018

Немного нового в Pundit. У меня есть 3 модели и стол столярный; модели User, Customer и Route и таблицу соединений, которая позволяет пользователям иметь маршрут. Клиентам принадлежит конкретный маршрут.

Я просто хочу разрешить пользователю видеть клиента, если у него есть маршрут в таблице соединений routes_users.

Я нашел много способов сделать это. Но какой лучший способ достичь этого?

customer_policy.rb

def show?
  if user.admin? || user.sales_manager?
    true
  else
    user.routes.map(&:id).include? record.route_id
  end
end

1 Ответ

0 голосов
/ 12 сентября 2018

Использование .map не очень хорошая идея, так как он будет заполнять все маршруты из БД для их локального поиска, лучше всего использовать .where, а не .map, как показано ниже:

def show?
  if user.admin? || user.sales_manager?
    true
  else
    user.routes.where(record.route_id).count > 0
  end
end
...