ruby-on-rails - 通过关系在 has_many 上使用关联值来过滤事件管理中的表(Rails 4/事件管理)

标签 ruby-on-rails ruby ruby-on-rails-3 postgresql activeadmin

我有一个基本的 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/

相关文章:

ruby-on-rails - 哈希 to_json 和返回不保留哈希作为键?

javascript - 你如何在客户端处理复杂的 JavaScript 对象?

javascript - Sinatra:呈现表单输入而不重定向

ruby - 在 Ruby Regex 中使用超过 9 个未命名的捕获

ruby-on-rails - 重定向和登录或登录和重定向?

ruby-on-rails - ruby on Rails dto 对象 - 你在哪里存储它们?

ruby-on-rails - 友好的 Id 自定义 Slug

ruby - 针对多个目标运行 rspec

ruby-on-rails - 严重卡在 : validations not triggered for nested resource with fields_for

ruby-on-rails-3 - Rails 3.2 - accepts_nested_attributes_for 并加入模型