Ruby on rails Ruby:在视图中显示SQL结果时出现问题

Ruby on rails Ruby:在视图中显示SQL结果时出现问题,ruby-on-rails,ruby,Ruby On Rails,Ruby,在视图中显示SQL结果时遇到问题。“放置ROI”列仅显示ActiveRecord:Relation。。。我已经研究过了,但我不知道如何呈现价值。任何帮助都将不胜感激 以下是网页上的结果: Horse Name Win ROI Wins Total Races Place ROI Billy the Bull $13.3 2 2 #<ActiveRecord::Relation::ActiveRecord_

在视图中显示SQL结果时遇到问题。“放置ROI”列仅显示ActiveRecord:Relation。。。我已经研究过了,但我不知道如何呈现价值。任何帮助都将不胜感激

以下是网页上的结果:

Horse Name      Win ROI     Wins    Total Races     Place ROI
Billy the Bull  $13.3        2       2              #<ActiveRecord::Relation::ActiveRecord_Relation_Horse:0xb494fa5c> 

我的第一个建议是,因为很多查询肯定不是Rails的工作方式。您希望尽可能避免直接编写SQL,因为这样做会跳过ActiveRecord为您所做的任何查询清理

为了回答您的问题,在您的查询中发生的事情是,您得到的是horse表中只有place_roi虚拟列的行。然后要访问该列,您需要在关系中附加.place\u roi,如下所示:

Horse.only_place_roi.find(horseWinROI.id).place_roi

如您所见,我还更改了查找位置,因为您只需要一条记录,并且正在按id查找。

回答得很好。工作得很好。非常感谢。我将按照你的建议做深潜水。再次感谢你的帮助。
HORSE_WIN_ROI_SELECT = "( (sum(entries.win_payoff) - (2 * count(horses.id))) / (2 * count(horses.id) ) )"
HORSE_PLACE_ROI_SELECT = "( (sum(entries.place_payoff) - (2 * count(horses.id))) / (2 * count(horses.id) ) )"

HORSE_NUMBER_OF_WINS = "SUM(CASE WHEN CAST(entries.official_finish as int) = 1 THEN 1 ELSE 0 END)"

scope :with_win_roi, -> {
    joins({:entries => {:race => [:chart,:race_level]}}).
    group("horses.id").
    select("CAST(#{HORSE_WIN_ROI_SELECT} as decimal(10,2)) as win_roi,horses.*,horses.id, #{HORSE_NUMBER_OF_WINS} as wins, #{HORSE_NUMBER_OF_RACES} as total_races").
    order("win_roi DESC")
}

scope :only_place_roi, -> {
    joins({:entries => {:race => [:chart,:race_level]}}).
    group("horses.id").
    select("CAST(#{HORSE_PLACE_ROI_SELECT} as decimal(10,2)) as place_roi")
}
Horse.only_place_roi.find(horseWinROI.id).place_roi