如何通过连接表中的条件接收对象

Duc*_*uch 3 ruby activerecord ruby-on-rails ruby-on-rails-4

我有桌子Games,Badges他们通过桌子连接BadgesGames.

t.integer "badge_id"
t.integer "game_id"
t.boolean "shown",    default: false
Run Code Online (Sandbox Code Playgroud)

我有Game对象,我想要找到所有的Badges东西shown

game_object.(condition?).badges
Run Code Online (Sandbox Code Playgroud)

怎么弄?

Lew*_*ley 6

假设您设置了has_and_belongs_to_many"通过"关系:

class Game < ActiveRecord::Base
  has_many :game_badges
  has_many :badges, through: :game_badges
end

class GameBadge < ActiveRecord::Base
  belongs_to :game
  belongs_to :badge
end

class Badge < ActiveRecord::Base
  has_many :game_badges
  has_many :games, through: :game_badges
end
Run Code Online (Sandbox Code Playgroud)

然后你可以使用以下内容:

game.game_badges.where(shown: false).map(&:badge)
Run Code Online (Sandbox Code Playgroud)

  • 我认为你需要使用`.map(&:badge)`而不是`.badges`作为`where`方法将返回一个`game_badges`的集合,它不知道'badges`的含义. (3认同)