在我的应用程序控制器中,我有after_sign_in_path_for(resource)
方法在用户或管理员登录后更改登录路线。
我想改变用户登录路线,具体取决于他们是否有任何当前帖子,但我无法将其作为案例陈述或if语句使用。这是我目前所拥有的并且它有效;
def after_sign_in_path_for(resource)
case resource
when Admin then admin_root_path
when User then root_url
end
end
但是我想把它改成像这样的if语句(或者如果更容易的话就是case语句),但这不起作用......
def after_sign_in_path_for(resource)
if resource == User
if current_user.posts.count == 1
post_path(1)
else
root_url
end
elsif resource == Admin
admin_root_path
end
end
答案 0 :(得分:0)
在Ruby中,case语句使用case equality operator ===。请考虑以下代码
>> User.new === User # false
>> User === User.new # true
>> User.new.is_a?(User) # true
case
使用第二个代码检查是否相等。知道这一点,您可以将代码更改为
if resource.is_a?(User)
...
elsif resource.is_a?(Admin)
...
end
您也可以使用===
,但is_a?
更具可读性
if User === resource
...
elsif Admin === resource
...
end
还有另一种方法可以做到这一点,那就是获取资源的类
if resource.class.name == 'User'
如果你正在使用继承,请注意
class Foo; end
class Bar < Foo; end
bar = Bar.new
bar.is_a?(Foo) # true
Foo === bar # true