Ruby on rails Rails中未定义ApplicationController辅助方法
我正在尝试编写一个简单的助手方法,用于检查用户的电子邮件地址是否包含特定的域名。该方法在我的所有控制器中都是必需的,并且取决于当前用户的状态,因此我觉得最好将其放在我的ApplicationController中。根据第3行对方法的评估,将调用第二个助手方法。我模仿了我的设置 当我插入此代码并刷新页面时,应该点击Ruby on rails Rails中未定义ApplicationController辅助方法,ruby-on-rails,ruby-on-rails-3,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 3,Ruby On Rails 4,我正在尝试编写一个简单的助手方法,用于检查用户的电子邮件地址是否包含特定的域名。该方法在我的所有控制器中都是必需的,并且取决于当前用户的状态,因此我觉得最好将其放在我的ApplicationController中。根据第3行对方法的评估,将调用第二个助手方法。我模仿了我的设置 当我插入此代码并刷新页面时,应该点击binding.pry,这表明正在评估我定义的帮助器方法,但不会发生这种情况。相反,:disable_intercom?计算结果为true,而不点击下面的方法。如果删除冒号,会出现一个错
binding.pry
,这表明正在评估我定义的帮助器方法,但不会发生这种情况。相反,:disable_intercom?
计算结果为true,而不点击下面的方法。如果删除冒号,会出现一个错误,说明disable\u 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
class ApplicationController 在操作后跳过:对讲机轨道自动包含如果:禁用对讲机?
私有的
def禁用对讲机?
捆绑,撬动
如果用户已登录?
当前用户.email.split('@')。包括?('mysite.com')?对:错
其他的
假的
结束
结束
结束
谢谢
更新:
下面是关于这个问题的其他一些StackOverflow讨论。我尝试了各种建议的解决方案,但似乎没有任何东西触发禁用对讲机?
方法
更换:
skip_after_action :intercom_rails_auto_include if :disable_intercom?
与:
在您的初始代码(即有效的ruby)中,您基本上总是跳过,因为您不传递
如果作为skip\u操作后的一个选项,则在符号为truthy时触发该行,ie always问题似乎在于动作后跳过不接受条件参数,例如if:
或除非:
。即使您传递了一个条件,也会始终执行skip\u after\u操作
回调
不幸的是,这意味着我不可能用代码做我想做的事情。我正在研究其他有条件地禁用对讲机API的方法,因为在
回调后使用有条件的skip\u不是一个可行的解决方案。skip\u after\u action:Intercom\u rails\u auto\u include,if::disable\u Intercom?我收到一个错误,说语法错误,输入意外结束,应为关键字\u end
是否在if之后获得冒号?应该是“如果:”是的,我也试过了<代码>操作后跳过:对讲机轨道自动包含,如果::禁用对讲机?
总是评估:禁用对讲机?
为真实。我收到一个错误,说语法错误,输入意外结束,期望关键字结束
对不起,根据我进一步挖掘后的理解,编辑了我的答案,skip\u after\u action
将始终求值,无论您通过它的条件如何。如果我刚刚将:disable_intercom?
替换为true
,则条件仍然被跳过。我最后做的是在操作:禁用对讲机后将回调更改为。然后,在<代码> Dabable内部通信系统> <代码>我称之为“代码> ItCOMLyRyssAutoMIX包含/<代码>如果用户被签到并且他们的电子邮件地址符合标准。@ ACIDSTEALTH请考虑将您的解决方案提交给答案,而不是评论。
skip_after_action :intercom_rails_auto_include, if: :disable_intercom?