5

私は3つのモデルを持っています:

スケジュール

belongs_to :service

サービス

belongs_to :user, :foreign_key => "owner"
has_many :shedules, :dependent => :destroy

ユーザー

has_many :services, :foreign_key => "owner", :dependent => :destroy
has_many :shedules, :through => :services, :foreign_key => "owner", :dependent => :destroy

次に、ユーザーのすべてのスケジュールを見ることができますmy_user.shedules

私の目標は、ユーザーのすべてのスケジュールを削除することです。その後、試しmy_user.shedules.delete_allてみましたが、次のエラーが発生しました。

ActiveRecord::HasManyThroughCantAssociateThroughHasOneOrManyReflection: ソース リフレクション クラス 'Shedule' が :has_many 経由で 'Service' に関連付けられているため、関連付け 'User#shedules' を変更できません。

グーグルで検索した後、これと他の同様の投稿をいくつか見つけましたが、それらはすべて私の問題に適合しません。

もちろん、次のようなユーザーサービスを繰り返すことでこれを削除できます

my_user.services.each do |s|
    s.shedules.delete_all
end

しかし、私はなぜmy_user.shedules.delete_allうまくいかないのか興味深いです。

ありがとう!

4

3 に答える 3

1

試す:-

my_user.shedules.destroy_all

また

Shedule.delete_all(:owner => my_user.id)
于 2013-06-04T12:09:56.243 に答える
0

関連付けを使用して を削除できるかどうかわかりませんschedules。これらのレコードは、自分で見つけるだけで削除できます。

Shedule.where(service_id: user.services.pluck(&:id)).delete_all
user.reload # optional

これを頻繁に使用する場合は、メソッドを定義できますUser

def delete_schedules
  Shedule.where(service_id: user.services.pluck(&:id)).delete_all
end
于 2016-11-04T20:28:38.007 に答える