Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails中未定义ApplicationController辅助方法_Ruby On Rails_Ruby On Rails 3_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails Rails中未定义ApplicationController辅助方法

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,而不点击下面的方法。如果删除冒号,会出现一个错

我正在尝试编写一个简单的助手方法,用于检查用户的电子邮件地址是否包含特定的域名。该方法在我的所有控制器中都是必需的,并且取决于当前用户的状态,因此我觉得最好将其放在我的ApplicationController中。根据第3行对方法的评估,将调用第二个助手方法。我模仿了我的设置

当我插入此代码并刷新页面时,应该点击
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?