【问题标题】:Access value of foreign-key外键访问值
【发布时间】:2020-07-16 07:45:28
【问题描述】:

我正在开发自己的网络应用程序,但我遇到了问题。 这是我的模型:

class User < ApplicationRecord
      devise :database_authenticatable, :registerable,
             :recoverable, :rememberable, :validatable
      has_many :player_seasons
      has_many :forecasts, through: :player_seasons
    end

class PlayerSeason < ApplicationRecord
  belongs_to :user
  belongs_to :season
  belongs_to :championship
  has_many :forecasts
  has_many :matches, through: :forecasts
end

class Championship < ApplicationRecord
  belongs_to :season
  has_many :player_seasons
  has_many :users, through: :player_seasons
end

@playerseasons = PlayerSeason.all

我正在迭代:@playerseasons 我想比较所有的 PlayerSeason (@playerseasons) 如下:

@playerseasons.each do |playerseason|
if playerseason.championship_id == @playerseason.championship
else
end
end

这个想法是比较所有 playerseason,如果 playerseason 与 current_user 拥有相同的冠军,则会出现其他内容(基本条件)。

但我卡住了,无法访问当前用户的确切冠军,另一方面我可以访问 playerseasons 的冠军。

提前谢谢你:)

【问题讨论】:

  • 为什么无法访问 player.champsionship?这应该由设计加载为current_user
  • 你好 Mark,当我在 @playerseasons 上进行迭代时,我可以访问 playerseason.championship。但是当我用@playerseason.championship尝试它时,它出现了未定义的方法“冠军”
  • 为什么不直接比较 @playerseason.championship_idplayerseason.championship_id
  • 是的,这正是我正在做的事情,但是当我在做 @playerseason.championship_id 时,它会引发一个未定义的方法错误:“#<:activerecord_relation:...>
  • 你是如何设置@playerseason的?您不要在问题中发布它

标签: ruby-on-rails ruby postgresql


【解决方案1】:

我没有批判性地看待可能会以不同方式完成的数据库设计模型。此外,正如您在问题中提到的那样,我将其视为非生产应用程序,因此数据库负载优化是第二要务。

有了你现在拥有的东西,我会做一些事情来让它工作

user_championships = current_user.player_seasons.map(&:championship).uniq

@playerseasons.each do |playerseason|
   if user_championships.include?(playerseason.championship)
    
    else
   end
end

 

【讨论】:

  • 你好@serengeti12,确实是这样,谢谢,但我很想知道为什么数据库没有优化?如果这个答案可以处理很多不同的冠军?
  • 很高兴听到它奏效了。例如,调用 PlayerSeason.all 将无法扩展。当您有 10 个赛季和 10 个用户调用代码时..您将加载 (100 * 个关联的冠军) 对象。随着更多的季节或用户将很快增长。无论数据库如何增长,您都希望有一个加载/生成相同数量的数据库查询的设置。
  • 好的,我看到我通过只调用相关季节来缩小范围。非常感谢您的优化见解。非常感谢
猜你喜欢
  • 1970-01-01
  • 2014-08-12
  • 1970-01-01
  • 2021-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-20
相关资源
最近更新 更多