Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails RubyonRails,如何查询数据库中没有关联的对象?_Ruby On Rails_Postgresql_Rails Activerecord - Fatal编程技术网

Ruby on rails RubyonRails,如何查询数据库中没有关联的对象?

Ruby on rails RubyonRails,如何查询数据库中没有关联的对象?,ruby-on-rails,postgresql,rails-activerecord,Ruby On Rails,Postgresql,Rails Activerecord,这是我的第一个堆栈溢出问题,我很高兴来到这里!我今年才开始编写代码,所以我还是一名新手,需要您在rails方面的帮助 我正在创建一个模拟曲棍球选秀池的web应用程序。当用户创建联盟时,会自动创建并显示一组球员投影。然后,用户可以在联盟中创建团队,并为团队分配投影。我创建了一个名为player的模型,这是一种将投影与团队相关联的方法。当用户向团队添加投影时,他们实际上是在创建一个与两者关联的玩家实例。有了这个玩家模型,还有其他方法吗 我现在面临的一个问题是每次显示可用的投影时查询数据库需要多长时间

这是我的第一个堆栈溢出问题,我很高兴来到这里!我今年才开始编写代码,所以我还是一名新手,需要您在rails方面的帮助

我正在创建一个模拟曲棍球选秀池的web应用程序。当用户创建联盟时,会自动创建并显示一组球员投影。然后,用户可以在联盟中创建团队,并为团队分配投影。我创建了一个名为player的模型,这是一种将投影与团队相关联的方法。当用户向团队添加投影时,他们实际上是在创建一个与两者关联的玩家实例。有了这个玩家模型,还有其他方法吗

我现在面临的一个问题是每次显示可用的投影时查询数据库需要多长时间。一旦投影有了子玩家,它就不应该再出现在投影列表中。下面的代码循环遍历所有投影,只显示没有子播放器的投影

<h3>Projections</h3>
<ol>
  <% @projections.each do |projection| %>
    <% unless projection.player %>
    <li><%= projection.player_name %><%= link_to "Assign to Team", new_player_path(leauge: @leauge, projection: projection.id)  %></li>
    <% end %>
  <% end %>
</ol>
投影
  • 由于有600个投影,因此每次加载页面时都需要10-30秒来查询数据库。有没有更有效的方法

    以下是我的模型:

    class Leauge < ApplicationRecord
      require 'csv'
    
      belongs_to :user
      has_many :teams
      has_many :projections
      validates :name, uniqueness: true
      validates :name, presence: true
      
      def create_projections
        CSV.foreach(Rails.root.join('lib/seeds/projections.csv'), headers: true, header_converters: :symbol, encoding: 'ISO-8859-1') do |row|
          data = row.to_hash
          Projection.create!(
            player_name: data[:player],
            player_team: data[:team],
            goals: data[:goals],
            assists: data[:assists],
            points: data[:points],
            pp_points: data[:pp_points],
            hits: data[:hits],
            blocks: data[:blk],
            pim: data[:pim],
            fow: data[:fow],
            sog: data[:sog],
            leauge: self
          )
    
        end 
      end
    end
    
    class Leauge
    class Player
    类投影:球员
    结束
    
    class团队:玩家
    验证:名称,唯一性:true
    验证:名称,状态:true
    结束
    

    谢谢

    使用includes'@projections=Projection.includes(:players)'这不起作用。它仍然显示每一个投影?另外:玩家需要:玩家不创建错误@投影=投影。其中(leauge:@leauge)。包括(:玩家)
    class Player < ApplicationRecord
      belongs_to :projection
      belongs_to :team
    end
    
    class Projection < ApplicationRecord
      belongs_to :leauge 
      has_one :player
      has_one :team, :through => :player
    end
    
    class Team < ApplicationRecord
      belongs_to :leauge
      has_many :players
      has_many :projections, :through => :players
    
      validates :name, uniqueness: true
      validates :name, presence: true
    end