2013-04-28 2 views
0

Документация CanCan по этому показанию немного запутанна.Использование областей для ограничения возможностей в CanCan

Она обеспечивает этот пример:

can :read, Article, Article.published do |article| 
    article.published_at <= Time.now 
end 

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

В настоящее время я делаю что-то вроде этого :

can :validate, User.without_validation_finished 
can :invalidate, User.with_validation_requested 

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

ответ

1

Область действия используется для действия индекса, поскольку нет единственного товара (@article). Блок используется для действия show, когда присутствует @article.

+0

, что также указывает на то, что мои действия validate и: invalidate будут использовать блок, поскольку они работают с одним @user, как действие show. Это означало бы, что я не получу правильное поведение, которое, как мне кажется, в настоящее время – Naps62