【问题标题】:Ruby on Rails, Connecting Each() Directly to QueryRuby on Rails,将 Each() 直接连接到查询
【发布时间】:2014-05-23 09:54:42
【问题描述】:

在 ruby​​ 中,我是否编写类似的代码不仅仅是个人偏好和可读性问题

 My_Table.all().each{ DO SOMETHING }

相对

table_info = My_Table.all()
table_info.each { DO SOMETHING }

编辑:添加的代码促使我提出这个问题。

games = Game.where(league: Team.leagues[league])
           .where(final: true)
           .where(part_of_season: part_of_season)
           .pluck(*fields).each_with_object({}) do |row, hsh|
             hsh[row[0]] = Hash[fields[1, fields.length].zip(row[1, row.length])]
           end

【问题讨论】:

  • 你在做什么需要在抓取表信息后立即使用#each?这个问题可能有更好的解决方案。

标签: ruby-on-rails ruby each


【解决方案1】:

我个人会使用命名范围

class Game
  scope :games_for_league, lambda {|leagues, part_of_season|
    .where(league: leagues, final: true, part_of_season: part_of_season)
  }
end

然后在你的控制器上

leagues = Team.leagues[league]
games = Game.games_for_league(leagues,part_of_season)
            .pluck(*fields).each_with_object({}) do |row, hsh|
               hsh[row[0]] = Hash[fields[1, fields.length].zip(row[1, row.length])]
             end

我不确定你用那个采摘机做什么,但你也可以把它移到一个范围内

leagues = Team.leagues[league]
games = Game.games_for_league(leagues,part_of_season).another_scope_with_that_pluck

始终尝试将逻辑和查询转移到您的模型中,它使控制器规范变得更加容易,并且代码看起来非常干净

【讨论】:

    【解决方案2】:

    在 ruby​​ 中,它不仅仅是个人偏好和可读性 问题我是否编写类似的代码

    没有

    奖励:

    如果联赛建模正确,您可以简化它:

    finals = league.games.where(final: true, part_of_season: part_of_season)
    

    【讨论】:

      猜你喜欢
      • 2012-05-10
      • 1970-01-01
      • 2011-05-10
      • 1970-01-01
      • 2016-04-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-18
      • 2013-05-30
      相关资源
      最近更新 更多