Rails 4.2.6 向活动记录元素添加额外的属性



我想在不先转换为 JSON 的情况下向查询结果添加额外的字段。

我有3个模型teamtournamentmatch,具有以下关系:

class Match < ActiveRecord::Base
belongs_to :homeTeam, class_name: "Team", foreign_key: "localTeam"
belongs_to :awayTeam, class_name: "Team", foreign_key: "visitorTeam"
class Team < ActiveRecord::Base
has_many :local_matches, class_name: "Match", foreign_key: "localTeam"
has_many :visitor_matches, class_name: "Match", foreign_key: "visitorTeam"
class Tournament < ActiveRecord::Base
has_many :matches, class_name:"Match",foreign_key: "tournamentId"

Tournament类中,我正在尝试添加一个函数,该函数将为我提供巡回赛中所有比赛的列表,但对于每场比赛,它应该包括来自其中涉及的Team(主队和客队(的一些数据。

我正在尝试以下方法:

def tournament_matches
matches= self.matches
matches.each do |match|
match[:home_team_logo] = match.homeTeam.logo //add this field
match[:visitor_team_logo] = match.awayTeam.logo //add this field
end
matches.group_by(:round)
end

但是我得到一个错误:
ActiveModel::MissingAttributeError: can't write unknown attribute 'local_team_name'

我可以怎么做才能将Team中的额外字段添加到返回的ActiveRecord::Associations::CollectionProxyMatch类元素中?请记住,Team.logo是一个函数,而不是一个属性。

可以在团队模型中使用attr_accessor并在其中存储值。它创建了一个数据库中不存在的虚拟字段,但您可以使用match.homeTeam.<attribute_name>访问它。您可以在此处阅读有关attr_accessor的信息:

Ruby 中的attr_accessor是什么?

https://apidock.com/ruby/Module/attr_accessor

最新更新