在我的应用中,用户可以通过iframe在其他网站中嵌入表单。为此,他们可以在表格中指定“表单设置”,例如e。 G。表格的背景颜色。在此表中,他们还可以指定填写表单的用户是否必须登录。
存在两种类型的身份验证方法:
因此我的控制器看起来像是:
class MyController < ApplicationController
before_action :load_form_settings
before_action :authenticate_user!, if: @settings.auth_id == 1
...
private
def load_form_settings
@settings = Formsetting.find_by(:form_id => params[:form_id])
end
end
然而,它说@settings
是零。似乎在:load_form_settings
之前运行:authenticate_user!
没有效果。我做错了什么?
答案 0 :(得分:1)
尝试if: -> { @settings.auth_id == 1 }
before_action
是一种类方法。它为MyController
的实例方法的回调数组添加了一个新的回调。当您从控制器调用实例方法时,将执行这些回调。
@settings.auth_id == 1
是一个表达式。它在向数组添加回调时执行。如果希望在回调执行时执行符号或proc,则需要传递符号或proc。