序文 これは、この質問に対する正確な回答ではありませんが、この種の機能を探している人にとっては、これが役立つかもしれません。これと他のオプションを非常に慎重に検討してから、必要に応じて実稼働環境に配置してください。
場合によっては、has_one 関係を利用して、必要なものを取得できます。繰り返しますが、これを使用する前に、何を達成しようとしているのかをよく考えてください。
考慮すべきコード からへ
のhas_many
関係があり、新しいブランチを追加したいと考えています。Trunk
Branch
class Trunk
has_many :branches
end
class Branch
belongs_to :trunk
end
また、それらを個別に関連付けることもできます。has_one
にリレーションシップを追加しますTrunk
class Trunk
has_many :branches
has_one :branch
end
この時点で、次のようなことができTree.new.branch = Branch.new
ます。すぐには保存されませんが、保存後に から利用できるようになる関係を設定しますTree.first.branches
。
ただし、これは、新しい開発者がコードを見て、「一体、1 つまたは複数のどちらである必要があるのか?」と考えると、かなり混乱する状況になります。
これに対処するために、 とより合理的なhas_one
関係を作ることができscope
ます。
class Trunk
has_many :branches
# Using timestamps
has_one :newest_branch, -> { newest }, class_name: 'Branch'
# Alternative, using ID. Side note, avoid the railsy word "last"
has_one :aftmost_branch, -> { aftmost }, class_name: 'Branch'
end
class Branch
belongs_to :trunk
scope :newest, -> { order created_at: :desc }
scope :aftmost, -> { order id: :desc }
end
これには注意してください。ただし、OP で要求されている機能を実現できます。