我正在尝试编写一个简单的帮助方法,检查用户的电子邮件地址是否包含特定的域名。我的所有控制器都需要这个方法,并且取决于current_user
的状态,所以我觉得最好把它放在我的ApplicationController中。根据第3行方法的评估,调用第二个辅助方法。我在this question's answer上对我的设置进行了建模。
当我插入此代码并刷新页面时,应该点击binding.pry
,表示正在评估我定义的辅助方法,但这不会发生。相反,:disable_intercom?
评估为true而不按下面的方法。如果我删除冒号,我会收到一条错误消息,指出disable_intercom?
未定义。我在这里缺少什么?
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
skip_after_action :intercom_rails_auto_include if :disable_intercom?
private
def disable_intercom?
binding.pry
if user_signed_in?
current_user.email.split('@').include?('mysite.com') ? true : false
else
false
end
end
end
谢谢!
更新:
以下是我发现的关于此问题的一些其他StackOverflow讨论。我已经尝试了各种解决方案,但似乎没有触发disable_intercom?
方法。
conditionally apply skip_before_filter with :if => condition in rails 4
答案 0 :(得分:1)
替换:
skip_after_action :intercom_rails_auto_include if :disable_intercom?
使用:
skip_after_action :intercom_rails_auto_include, if: :disable_intercom?
在您的初始代码中,这是有效的ruby,您基本上总是跳过,因为您没有将if
作为选项传递给skip_after_action
,当符号真实时,即触发行,即始终
答案 1 :(得分:0)
问题似乎是skip_after_action
不接受条件参数,例如if:
或unless:
。即使您传递条件,也始终执行skip_after_action
回调。
对我来说不幸的是,这意味着不可能做我想用代码做的事情。我正在研究有条件地禁用内部通信API的其他方法,因为使用条件skip_after
回调不是一个可行的解决方案。