【问题标题】:Rails 5 returning `#<ActiveRecord::Relation []>`Rails 5 返回`#<ActiveRecord::Relation []>`
【发布时间】:2017-04-17 04:32:39
【问题描述】:

我刚开始尝试了解 ActiveRecord 中的关联,它目前正在将 #&lt;ActiveRecord::Relation []&gt; 返回到我在 Web 控制台中运行的查询。

简而言之,我阅读了 Rails 指南并认为has_and_belongs_to_many 是最好的解决方案。我的终端显示它正在运行查询,但它似乎只是返回一个空数组,输出如下。

Processing by ScheduleController#show as HTML Parameters: {"id"=>"1"} Schedule Load (0.2ms) SELECT "schedules".* FROM "schedules" WHERE "schedules"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]] Player Load (0.3ms) SELECT "players".* FROM "players" WHERE "players"."team" = ? [["team", "@schedule.home"]]

我有一个Schedule 和一个Players 模型,这个想法是根据主队和客队名称返回一个球员列表。

models/player.rb

class Player < ApplicationRecord
 has_and_belongs_to_many :schedules
end

models/schedule.rb

class Schedule < ApplicationRecord
  has_and_belongs_to_many :players
end

db/migrate/(numbers)_create_schedules.rb

class CreateSchedules < ActiveRecord::Migration[5.0]
  def change
    create_table :schedules do |t|
      t.string :leagueGame
      t.string :home
      t.string :homeAbr
      t.string :away
      t.string :awayAbr
      t.string :venue
      t.string :prettyDate
      t.string :homeLogo
      t.string :homeLogoLarge
      t.string :awayLogo
      t.string :awayLogoLarge
      t.date :date

      t.timestamps
    end

    create_table :player_schedule do |t|
      t.belongs_to :player, index: true
      t.belongs_to :schedule, index: true
    end
  end
end

db/migrate/(numbers)_create_players.rb

class CreatePlayers < ActiveRecord::Migration[5.0]
  def change
    create_table :players do |t|
      t.string :name
      t.string :team
      t.string :shoots
      t.string :catches
      t.string :position
      t.string :abr
      t.integer :number
      t.integer :gp
      t.integer :goals
      t.integer :assists
      t.integer :points
      t.integer :pim
      t.integer :plusMinus
      t.decimal :gaa
      t.integer :svs

      t.timestamps
    end   
  end
end

控制器/schedule_controller.rb

# For brevity
  def show
    @schedule = Schedule.find(params[:id])
    @home_lineup = Player.where(team: '@schedule.home')
  end

@home_lineup 是返回空数组的调用。我可以调用@schedule.home,它会显示正确的团队名称,但我可以像查找表一样调用它吗?

【问题讨论】:

    标签: ruby-on-rails sqlite activerecord


    【解决方案1】:

    替换

    @home_lineup = Player.where(team: '@schedule.home')
    

    @home_lineup = Player.where(team: @schedule.home)
    

    根据您的代码,您正在搜索名为“@schedule.home”的团队,而不是实际的团队名称。

    【讨论】:

    • 我的语法总是有点错误,答案总是那么简单!非常感谢@Sajin :)
    • @RedHendery 如果回答正确,请采纳:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-18
    • 1970-01-01
    • 2014-05-23
    相关资源
    最近更新 更多