【发布时间】:2021-05-26 17:01:26
【问题描述】:
我在控制器中设置了这些before_actions:
before_action :require_user, unless: :public?, only: [:show]
before_action :require_user, only: [:index, :edit, :update]
基本上我只是在public? 为假时尝试在show 操作中执行过滤器required_front_user。
对于其余的操作,我希望始终执行过滤器。
看起来第一个 before_action 设置被忽略并完全被第二个设置覆盖。
是否可以使用before_action 语句组合这两种组合,还是我必须在过滤器中实现这个逻辑?
更新
这也行不通:
before_action :require_user, if: :public?, only: [:index, :edit, :update]
before_action :require_user, unless: :public?, only: [:show, :index, :edit, :update]
我想如果public? 返回true 将加载第一个设置,如果false 将加载第二个设置。碰巧只加载了第二个设置,如果public? == true 永远不会触发before_action
更新 2
这是我发现它的工作原理:
before_action :require_user_when_public, if: :public?, only: [:index, :edit, :update]
before_action :require_user_when_no_public, unless: :public?, only: [:show, :index, :edit, :update]
protected
def require_user_when_public
require_user
end
def require_user_when_no_public
require_user
end
这很丑:/
【问题讨论】:
标签: ruby controller ruby-on-rails-6