Rails 3 способа сделать skip_before_filter,: только - PullRequest
10 голосов
/ 23 июля 2011

В рельсах 2.8 мы можем написать skip_before_filter следующим образом

skip_before_filter :require_login, :only => [:create,:new,:accept]

, что означает, что я хотел применить фильтр require_login только к этим действиям [:create,:new,:accept] и пропустить фильтр для других.

Но, похоже, этот путь устарел в рельсах 3. И добавлен новый skip_filter . я пробовал это

 skip_filter :require_login, :only => [:create,:new,:accept]

но это не работает, так как я могу это сделать в рельсах 3.

Ответы [ 2 ]

15 голосов
/ 07 сентября 2013

Это неправильное использование skip_before_filter.

Чтобы применить фильтр require_login исключительно к действиям [:create,:new,:accept] и пропустить фильтр для других, сначала необходимо применить фильтр:

before_filter :require_login

Затем вы должны указать rails пропустить этот фильтр за исключением для действий "создать, новый и принять".

skip_before_filter :require_login, :except => [:create,:new,:accept]

вы также можете использовать skip_filter, который позволяет включать фильтры before_filter, after_filter и around_filter:

skip_filter :require_login, :except => [:create,:new,:accept]

Ссылка: Руководство по Rails 3.2

В Rails 4.0эквивалентные методы: before_action и: skip_before_action.

Ссылка: Руководство по Rails 4.0

11 голосов
/ 23 июля 2011
  • skip_before_filter не устарело, см. Источник .

  • Вы используете его как положено.

Так как вы поняли, что он работает неправильно?

...