3

私はシンプルなモデルを持っていUserます。Accountユーザーが関連付けられているアカウントが削除されないようにしたい。User私は一つ一つを創造Accountし、それらを関連付けます。次に、Account.find(x).destroyコンソールで行います。アカウントが壊れる!

ノート:

  1. ユーザーaccount_idが正しいです。
  2. Account.find(x).users.empty?コンソールリターン時false
  3. Account.find(x).destroyable?コンソールリターン時true
  4. users.empty?def destroyable?リターンでtrue!!

私は何か間違ったことをしていますか?それは何ですか?

コード (Ruby 1.9.2-p290 上の Rails 3.2.9):

class User < ActiveRecord::Base
  belongs_to :account
end

class Account < ActiveRecord::Base

  has_many :users, dependent: :destroy
  attr_accessible :name
  before_destroy :destroyable?

  def destroyable?
    if users.empty? # This returns true when called via callback.
      true
    else
      false
    end
  end

end
4

2 に答える 2

7

つまり、これはもう 1 つの Rails の落とし穴であることがわかります。

解決策は、呼び出しのbefore_destroy上に移動することです。has_many

@Yves Senn、あなたは正しいです。これからは避けます。dependent: :restrictの代わりに を使用するとdependent :destroy、この場合、コールバックが不要になりbefore_destroyます。

于 2013-01-05T19:30:17.340 に答える
1

問題は だと思いますdependent: :destroy。ユーザーが関連付けられているアカウントを破棄したくない場合は、依存オプションを追加しないでください。

また、誤ってユーザーを破壊する可能性があるため、これは非常に危険です。

于 2013-01-05T19:23:09.107 に答える