CanCanCan Разрешить создание дочерней записи на основе атрибутов ее родителя - PullRequest
0 голосов
/ 26 февраля 2019

В настоящее время я пытаюсь настроить авторизацию CanCanCan для дочерней модели на основе атрибутов родительских моделей, но я не могу заставить ее работать.Мне нужно что-то вроде следующего:

can(:create, Bid) { |b| b.request.status == :open }

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

Проблема в том, что экземпляр Bid всегда будет иметь запрос nil.

Я заметил, что авторизация запускается раньше, чем контроллер, поэтому он использует мой bid_params до того, как я выполню @bid = @request.bids.build(bid_params)в контроллере.

Я пытался использовать load_and_authorize_resource :bid, through: :request, но это не помогло.

Что я делаю не так?

1 Ответ

0 голосов
/ 28 февраля 2019

Я бы попробовал сделать это "вручную", прежде чем использовать load_and_authorize_resource.

def create
  @bid  = @request.bid.find(params[:id])
  authorize! :create, @bid
end

, ваша способность может быть переписана более простым способом как

can :create, Bid, request: { status: :open }

, когда это работаеттакже должно работать

load_and_authorize_resource :request
load_and_authorize_resource through: :request

, и вы можете удалить свой "ручной" вызов authorize!

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