機能するメソッドを作成しましたが、エレガントではありません。私はより良い方法を逃したかどうか疑問に思っています。
私はそのように設定されたポリモーフィックな関連付けを持っています。
class Employee < ActiveRecord::Base
has_many :phones, as: :phoneable
end
class Client < ActiveRecord::Base
has_many :phones, as: :phoneable
end
class Phone < ActiveRecord::Base
belongs_to :phoneable, polymorphic: true
end
私の電話テーブルには標準phoneable_id:integer
とphoneable_type:string
列があります。
私がやりたいことは、以前に選択した従業員グループのすべての電話を取得することです。
employees = Employee.where role: 'peon'
これが通常のhas_many
関係である場合、電話クエリを次のように記述します。
Phone.where employee_id: employees
ポリモーフィックな関係でこれを行うために、クエリを次のように記述しました。
Phone.where phoneable_type: 'employee', phoneable_id: employees
これはうまくいきますが、明示的にphoneable_type
. Rails には、従業員のコレクションが表示されたときにこれを自動的に行う方法がありますか?それとも単純さを求めすぎているのでしょうか?