Bri*_*ian 14 ruby ruby-on-rails
我正在开发一个ruby on rails应用程序.对于会话控制器,我想使用案例来检查用户的帐户是否被锁定或被禁止.我试图使用类的对象作为案例,并使用何时检查属性.
例如,
user = Profile.find(1)
case user
when user.ban
redirect_to()
when user.lock
redirect_to()
else
redirect_to()
end
Run Code Online (Sandbox Code Playgroud)
唯一的问题是不起作用.
这是什么工作:
case user.ban
when true
redirect_to()
else
redirect_to()
end
Run Code Online (Sandbox Code Playgroud)
关于如何使用开关检查用户对象是否被禁止或锁定的任何建议?
谢谢
Zep*_*ock 25
创建一个user.status方法,返回用户的状态,然后你可以这样做:
user = Profile.find(1)
case user.status
when "banned"
redirect_to()
when "locked"
redirect_to()
else
redirect_to()
end
Run Code Online (Sandbox Code Playgroud)
Ama*_*dan 14
我喜欢@ Salil的回答; 但是,如果你真的喜欢case,你可以这样做:
case true
when user.ban
redirect_to()
when user.lock
redirect_to()
else
redirect_to()
end
Run Code Online (Sandbox Code Playgroud)
更新 Jörg说这也有效,他是对的!给他一些回答他的答案!(我也一样)
case
when user.ban
redirect_to()
when user.lock
redirect_to()
else
redirect_to()
end
Run Code Online (Sandbox Code Playgroud)
更新2012现在可以使用:
case user
when lambda(&:ban)
redirect_to()
when lambda(&:lock)
redirect_to()
else
redirect_to()
end
end
Run Code Online (Sandbox Code Playgroud)
请忽略user:
user = Profile.find(1)
case
when user.ban
redirect_to
when user.lock
redirect_to
else
redirect_to
end
Run Code Online (Sandbox Code Playgroud)
在Ruby中,case表达式有两种形式.在上面的表格中,它只是执行第一个分支,它评估一个值(即除了nil或之外的任何东西false).
另一种形式
case foo
when bar
baz
end
Run Code Online (Sandbox Code Playgroud)
相当于
if bar === foo
baz
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
44948 次 |
| 最近记录: |