繁体   English   中英

通过关系使用has_many上的关联值来过滤活动管理员中的表(Rails 4 /活动管理员)

[英]Use associated values on has_many through relations to filter a table in active admin (Rails 4/Active Admin)

我通过模型可以拥有一个基本的has_many,其中客户可以拥有多个游戏:

客户模型属于合作伙伴,因此具有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,如果它们相等,则该游戏可以出现在我的表。

很抱歉,我很难用言语解释。

作为参考,我上次尝试的尝试但是没有用:

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

考虑客户中的范围定义,该范围定义定义了游戏和客户之间的共享合作伙伴关系。 您应该在合作伙伴模型中定义has_many :games关联(上面未提供)

例如customer.rb

has_many :shared_partner_games, :through => :partner, :source => games

然后你的table_for

table_for customer.shared_partner_games

尝试像这样更改table_for结构

table_for customer.customer_games.where(customer.partner.id == Game.find_by_partner_id(customer.partner.id).partner.id)做| t |

不确定。请让我知道是否可行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM