我有一个基本的 has_many through 模型,其中客户可以拥有多个游戏:
Customer 模型属于合作伙伴,因此有一个 partner_id 列,对于属于合作伙伴的游戏模型也是如此。
models/customer.rb
has_many :customer_games
has_many :games, through: :customer_games
belongs_to :partner, :foreign_key => 'partner_id'
models/game.rb
has_many :customer_games
has_many :customers, through: :customer_games
belongs_to :partner, :foreign_key => 'partner_id'
models/customer_games.rb
belongs_to :customer, :foreign_key => 'customer_id'
belongs_to :game, :foreign_key => 'game_id'
在 admin/customer.rb 中,我有一个(工作)表,其中提供了特定客户的所有游戏的详细信息。我是这样理解的:
panel "Games and infos of these games for this customer:" do
table_for customer.customer_games do |t|
t.column("Name") { |customer_game| link_to customer_game.game.title, admin_game_path(customer_game.game), target: :blank }
t.column("Partner") { |customer_game| if customer_game.game.partner.name.present?
link_to customer_game.game.partner.name, admin_partner_path(customer_game.game.partner), target: :blank
else
status_tag('Empty')
end
}
t.column("Country") { |customer_game| customer_game.game.country }
end
end
我的问题:我只想在上表中显示其所属的合作伙伴与客户的合作伙伴相等的游戏。
也就是说,如果你在customer_games表中取一行games_id和customer_id,如果我去查game_id关联的partner_id,再去customer_id关联的partner_id,如果相等,那么这个游戏就可以出现在我的 table 上。
很难用语言解释,抱歉。
作为引用,我最后一次尝试了但没有成功:
panel "Games and infos of these games for this customer:" do
table_for customer.customer_games.where(game_id.game.partner_id == customer_id.customer.partner_id) do |t|
t.column("Game Name") { |customer_game| link_to customer_game.game.title, admin_game_path(customer_game.game), target: :blank }
t.column("Partner") { |customer_game| if customer_game.game.partner.name.present?
link_to customer_game.game.partner.name, admin_partner_path(customer_game.game.partner), target: :blank
else
status_tag('Empty')
end
}
t.column("Country") { |customer_game| customer_game.game.country }
end
end
最佳答案
考虑定义游戏和客户之间共享合作伙伴关系的客户范围定义。您应该在 Partner 模型中定义 has_many :games
关联(上面未提供)
例如customer.rb
has_many :shared_partner_games, :through => :partner, :source => games
然后是你的table_for
:
table_for customer.shared_partner_games
关于ruby-on-rails - 通过关系在 has_many 上使用关联值来过滤事件管理中的表(Rails 4/事件管理),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23186333/