0

2 つのクラス (Game と Report) があり、それらを追加の属性 (デフォルト = yes または no) にリンクしたいと考えています。ゲームには default_reports と optional_reports が必要です。次に、ゲームの作成/編集フォームの選択 (複数) でデフォルトおよびオプションのレポートを選択することにより、関連付けが更新されます。

has_many と through およびポリモーフィックな関連付けを使用してみましたが、関連付けられたオブジェクトが固定されていて、関連付けのみを管理したいというユースケースに適合するものはないようです。

class Game < ActiveRecord::Base
  has_many :game_reports
  has_many :reports, :through => :game_reports
end

class Report < ActiveRecord::Base
  has_many :game_reports
  has_many :games, :through => :game_reports
end

class GameReport < ActiveRecord::Base
  belongs_to :game
  belongs_to :report
end

どんな助けでも大歓迎です!

ありがとう

4

2 に答える 2

0

これは単なるモデルです。レコードを作成するためのビューとフォームは、まったく別の問題です。

いつでも has_many に条件オプションを追加できます。デフォルトをgame_reportsに追加すると仮定しているので、クラスを次のように変更します。

class Game < ActiveRecord::Base
  has_many :game_reports
  has_many :reports, :through => :game_reports
  has_many :default_reports, through: :game_reports, source: :report, conditions: { game_reports: { default: true } }
end
于 2013-02-19T14:41:51.153 に答える
0

Rails 4.2 以降では、ポリモーフィックな関連付けをスコープで使用し、foreign_keyおよびforeign_typeオプションを指定します。

class GameReport
   belongs_to :report, :polymorphic => true
end

class Game
   has_many :game_reports, :as => :report, :dependent => :destroy
   has_many :reports, -> { where attachable_type: "GameReport"},
     class_name: GameReport, foreign_key: :game_report_id,
     foreign_type: :game_report_type, dependent: :destroy
end

その他のアプローチ:

Rails ポリモーフィック アソシエーションと同じモデルの複数のアソシエーション

于 2016-09-04T21:25:23.143 に答える