Ruby Rails ActiveRecord Association,has_one通过belongs_to关系

时间:2016-01-21 16:01:55

标签: ruby-on-rails activerecord

模型

class GameResult < ActiveRecord::Base
  has_many :games
end

class Game < ActiveRecord::Base
  belongs_to :game_result
end

模式

create_table "game_results", force: :cascade do |t|
  t.string   "result"
end

create_table "games", force: :cascade do |t|
  t.integer  "game_result_id"
end

我目前可以通过调用

来检索结果
@game.game_result.result

通过建立正确的关联,我相信我应该可以打电话

@game.result

我通过关联尝试了很多has_many / one的配置,但无济于事,例如:

class Game < ActiveRecord::Base
  belongs_to :game_result
  has_one :result, through: :game_result, source: :result
end

我很感激有关如何解决这个问题的任何建议。谢谢!

1 个答案:

答案 0 :(得分:2)

class Game < ActiveRecord::Base
  belongs_to :game_result  
end

你想打电话

@game.game_result.result@game.result

你不能用关联来做,你需要使用rails'assocator

class Game < ActiveRecord::Base
  belongs_to :game_result  
  delegate :result, to: :game_result, allow_nil: true
end

最后您可能不需要allow_nil,具体取决于您的具体情况。

基本上这只是

的简便方法
class Game < ActiveRecord::Base
  belongs_to :game_result  

  def result
    return nil if game_result.nil?
    game_result.result
  end
end