我正在构建用户排名系统,并尝试使用名称分配user.rank
值。
我想在我的用户模型中定义类似的东西,然后在显示每个用户的排名时能够引用它,但这可能不是最好的方法:
class User < ActiveRecord::Base
RANK_NAMES = {
'Peasant' => (0..75),
'Craftsman' => (76..250),
'Vassal' => (251..750),
'Noble' => (750..1500),
'Monarch' => (1501..999999)
}
或许最好在控制器或助手中定义一个方法,如:
if user.rank == 0..75
rank_name = "Peasant"
elsif...
但不知道该怎么做。有人有什么想法?我甚至不确定该怎么称呼我正在尝试做什么,因此很难自己研究。
答案 0 :(得分:1)
假设user.rank存在,它可能就像这样简单。
class User < ActiveRecord::Base
...
def rank_name
case self.rank
when 0..75
'Peasant'
when 76..250
'Craftsman'
when 251..750
'Vassal'
when 750..1500
'Noble'
when 1501..999999
'Monarch'
end
end
...
end
答案 1 :(得分:0)
如果rank_name
具体 User
,我会将其设为User
的方法。
您可以尝试下面的内容。它可能会给你一些想法。
class User
RANKS = [
{:name => 'Peasant', :min => 0, :max => 75},
{:name => 'Craftsman', :min => 76, :max => 250}
# ...
]
attr_accessor :rank
def rank_name
# TODO what happens if rank is out of range of all ranks or rank is nil
# or not an integer
User::RANKS[rank_index][:name]
end
private
def rank_index
User::RANKS.index { |r| (r[:min]..r[:max]).include? @rank }
end
end
user = User.new
user.rank = 76
puts user.rank_name # -> Craftsman