我正在尝试添加使用etag
来添加包含当前用户ID的ETag:
UsersController:Class < ApplicationController
etag { current_user.id } if user_signed_in?
end
但是,由于在定义控制器类时Devise助手不可用,因此失败:
undefined method `user_signed_in?'
如果我尝试在etag
中使用before_action
,则无法定义:
before_action do
etag { current_user.try(:id) } if user_signed_in? # undefined method `etag'
end
我也尝试过:
before_action do
self.etag { current_user.id } if user_signed_in?
end
似乎没有添加额外的etagger
。
答案 0 :(得分:3)
在第一个示例中,self
是类本身,因此在定义etag
方法时,user_signed_in
不是。 Rails忽略任何返回nil的etag块,而不是
etag { current_user.id if user_signed_in? }
或只是
etag { current_user.try :id}
您的第二个和第三个示例不起作用,因为rails使用instance_exec
来评估块,因此self
是您无法调用类方法的类的实例。
最后,我不知道您发布的内容是否已经知道这一点,但只有在您拨打etag
时才会使用fresh_when
添加的电子邮件。