私のユーザーには、それぞれに 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