Rails 4 では、自己参照の親子関係で子を持たないすべてのレコードを見つけるにはどうすればよいですか?
モデルは、単一の親タスクと複数の子タスクを持つタスクです。モデルコードは次のとおりです。
class Task < ActiveRecord::Base
belongs_to :parent, class_name: 'Task'
has_many :children, class_name: 'Task', foreign_key: 'parent_id'
end
(自己参照モデルを含まない状況で)子供のいない親を見つけることに関する同様の質問から解決策を試しましたが、エラーが返されます:
ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column: children.id
この回答を次のように適応させることで、解決策を見つけたと思います。
scope :without_children, joins("left join tasks as children on children.parent_id = tasks.id").where("children.parent_id is null")
しかし、SQL を明示的に書き出すのではなく、問題を解決するためのより慣用的な方法はありますか?