Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 当回调返回false时,Rails3将删除me HABTM记录_Ruby On Rails_Ruby On Rails 3_Activerecord - Fatal编程技术网

Ruby on rails 当回调返回false时,Rails3将删除me HABTM记录

Ruby on rails 当回调返回false时,Rails3将删除me HABTM记录,ruby-on-rails,ruby-on-rails-3,activerecord,Ruby On Rails,Ruby On Rails 3,Activerecord,我有这个模型: class User < ActiveRecord::Base has_and_belongs_to_many :roles before_destroy do |u| if u.superadmin? and User.joins(:roles).where(:roles => {:superadmin => true}).count == 1 u.errors.add(:base, "cannot delete last adm

我有这个模型:

class User < ActiveRecord::Base
  has_and_belongs_to_many :roles

  before_destroy do |u|
    if u.superadmin? and User.joins(:roles).where(:roles => {:superadmin => true}).count == 1
      u.errors.add(:base, "cannot delete last admin user")
      return false
    end
    return true
  end
end

class Role < ActiveRecord::Base
  has_and_belongs_to_many :users
end

感谢您的帮助。

如果您使用较旧的rails版本,这似乎是rails的错误(应该在rails 3.0.6 AFAIK中解决):

我看到很多网络“内容”表明返回false并不像人们期望的那样。同样的消息来源表明,在before过滤器中重定向或渲染是解决这个问题的“Rails方式”,尽管我对此没有意见。另外,在块中使用“return”语句是一个非常糟糕的主意。谢谢
SQL (0.2ms)  SELECT COUNT(*) FROM "users" INNER JOIN "roles_users" ON "roles_users"."user_id" = "users"."id" INNER JOIN "roles" ON "roles"."id" = "roles_users"."role_id" WHERE "roles"."superadmin" = 't'
AREL (0.4ms)  DELETE FROM "roles_users" WHERE "roles_users"."user_id" = 1 AND "roles_users"."role_id" IN (1, 4)
Organization Load (0.4ms)  SELECT * FROM "organizations" INNER JOIN "organizations_users" ON "organizations".id = "organizations_users".organization_id WHERE ("organizations_users".user_id = 1 )