加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Ruby on Rails:如果你的after_create操作中有

发布时间:2020-12-17 01:53:58 所属栏目:百科 来源:网络整理
导读:对于一个动作,是否使用50个if-else语句过于耗费资源? 我正在做这样的事情: if team.players.count 1 assign_team_type(..)elsif team.players.count 3 assign_team_type(..)...etc....end 另外,在控制器中的create action中放置50个if-else语句而不是after
对于一个动作,是否使用50个if-else语句过于耗费资源?

我正在做这样的事情:

if team.players.count > 1
   assign_team_type(..)
elsif team.players.count > 3
   assign_team_type(..)
...
etc.
...
end

另外,在控制器中的create action中放置50个if-else语句而不是after_create方法会更有效吗?或者使用case switch语句更有效率,还是完全避免使用它?

编辑:感谢您的快速回复!该代码用于社区体育锦标赛,根据该团队的球员数量分配球队.我正在尝试根据向该团队添加的玩家数量,为每个团队编写一个团队类型.因此,有1个玩家,3个玩家,5个玩家,7个玩家等的团队,最多200个玩家,总共需要50个if-else语句.

这些陈述发生在players_controller中,在用户访问http://localhost/players/new之后,添加一个玩家,然后应用程序根据该团队当前有多少玩家决定分配他或她的团队的团队.它非常简单(一个基本的CRUD应用程序只需要这50个if-else语句)

models:

Team (has_many :players)
Player (belongs_to :team)

scaffold team name:string team_type:string
scaffold player team_id:integer name:string

那就是它:)

解决方法

您可以尝试将其重写为

assign_team_type(case team.players.count
                 when 2    then ...
                 when 3..5 then ...
                 else raise "Assignment failed"
                 end
)

这应该更快,因为team.players.count只评估一次.此外,它更清洁,更短.基准将有所帮助.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读