これはpolymorphic団体のためのかなり良いユースケースです。ここで
class Link < ActiveRecord::Base
belongs_to :linkable, polymorphic: true
end
class Piece < ActiveRecord::Base
has_many :links, as: :linkable
end
class Section < ActiveRecord::Base
has_many :links, as: :linkable
end
links
表はlinkable_id
(int型)とlinkable_type
(文字列)の列があります。簡単にするために、多くの関係1から始めることができます。ここでの注意事項を取るための一つの重要なことはlinkable_id
は、ビューのRBDMS点から真の外部キーではないということです。むしろActiveRecordは関係をロードするときに関係がどのテーブルを指すかを解決します。
、我々は必要な動作を含むモジュールを作成することができ、重複を削減したい場合。 ActiveSupport::Concernを使用すると、そのようなモジュールの作成に関わる定型コードが大幅に削減されます。
class Link < ActiveRecord::Base
belongs_to :linkable, polymorphic: true
end
# app/models/concerns/linkable.rb
module Linkable
extend ActiveSupport::Concern
included do
has_many :links, as: :linkable
end
end
class Piece < ActiveRecord::Base
include Linkable
end
class Section < ActiveRecord::Base
include Linkable
end
どのように多対多の関係を作りますか?
サイドノートで
class Link < ActiveRecord::Base
has_many :linkings
end
# this is the join model which contains the associations between
# Links and the "linkable" models
class Linking < ActiveRecord::Base
belongs_to :link
belongs_to :linkable, polymorphic: true
end
# app/models/concerns/linkable.rb
module Linkable
extend ActiveSupport::Concern
included do
has_many :links, through: :linkings, as: :linkable
end
end
class Piece < ActiveRecord::Base
include Linkable
end
class Section < ActiveRecord::Base
include Linkable
end
- セクション間の階層構造を構築するための良い方法は、単一のセクションモデルとgive it a self joining relationshipを使用することです。
class Section < ActiveRecord::Base
belongs_to :parent, class_name: 'Section'
has_many :children, class_name: 'Section',
foreign_key: 'parent_id'
end
出典
2016-08-17 12:32:20
max
他のモデルの1つに属することができますか?または、すぐにそれらの多くに属していますか? –
アイデアは、それが1つに属すると考えていますが、どれが1つに属しているかによって、多くの人に属することができます。 ** Piece >> Section >> Subsection >> Subsubsection **の間にネストされた関係がありますので、** Subsection **に新しい** Link **を作成したい場合、** Subsection **に属しますまた、**セクション**と**ピース**のネストされた関係のために。 – Kingdavidek
あなたは関係を通してhas_manyを使用できます。このリンクを確認してください http://stackoverflow.com/questions/31358679/is-a-has-many-through-relationship-possible-with-4-models-in-rails – abhi110892