0

私のユーザーには、それぞれに 1 つのグループが割り当てられています。管理者がグループを削除する場合、削除できない最も基本的なグループ「メンバー」に移動する必要があります。

これで、メソッドが機能し、ルーティングとコントローラーが機能することがわかりましたが、最初はコントローラーからメソッド moveUsers を順番に呼び出したためです。

user = User.find(id)  
user.moveUsers
user.delete

ただし、これを分離して、コントローラーを最小限に抑えたいと思います。Rails3 の方法ですか?

コントローラーの方法:

  def destroy
    group = Group.find(params[:id])

    if group.delete
      redirect_to groups_url, :notice => "Group deleted."
    else
      redirect_to :back, :notice => "Cannot delete group."
    end

  end

モデル:

class Group < ActiveRecord::Base
    before_destroy :moveUsers

    validates :title, :presence => :true, :uniqueness => true
    has_many :user

    # Get the number of users associated with the group & title
    def getUserCount
        return User.where(:group_id => self.id).length
    end

    # If group is deleted move all of its users
    # to core group: Members (id = 1)
    private
    def moveUsers
        users = User.where(:group_id => self.id)

        users.each do |user|
            user.group_id = 1
            user.save
        end
    end
end
4

1 に答える 1

2

delete メソッドはコールバック メソッドを無視します

before_destroy コールバックを起動するには、group.destroy を使用する必要があります。

http://guides.rubyonrails.org/active_record_validations_callbacks.html#skipping-callbacks

于 2013-03-10T21:30:18.953 に答える