Ruby on rails 更新前的ActiveRecord不起作用
我不熟悉Rails。我有分类和公司模型,有很多分类。根据我的日志。我认为在更新之前,回调不起作用/请查看我的日志。更新后会调用它。/。 以下是我的公司模式:Ruby on rails 更新前的ActiveRecord不起作用,ruby-on-rails,ruby,ruby-on-rails-3,activerecord,Ruby On Rails,Ruby,Ruby On Rails 3,Activerecord,我不熟悉Rails。我有分类和公司模型,有很多分类。根据我的日志。我认为在更新之前,回调不起作用/请查看我的日志。更新后会调用它。/。 以下是我的公司模式: class Company < ActiveRecord::Base attr_accessible :description, :name, :phone, :web, :fax, :email, :address, :category_ids has_many :categorizations has_many :
class Company < ActiveRecord::Base
attr_accessible :description, :name, :phone, :web, :fax, :email, :address, :category_ids
has_many :categorizations
has_many :categories, through: :categorizations
before_create :increase_category_counters
before_update :update_category_counters
protected
def increase_category_counters
Category.update_all("count=count+1", ["id IN (?)", self.category_ids])
end
def update_category_counters
old_categories = self.categories.collect {|c| c.id}
puts "------------------------------ #{old_categories}"
old_category_ids = old_categories-category_ids
puts "------------------------------ #{old_category_ids}"
unless old_category_ids.empty?
Category.update_all("count=count-1", ["id IN (?)"], old_category_ids)
end
new_categories = category_ids-old_categories
puts "------------------------------ CATEGORY_IDS: #{category_ids}"
puts "------------------------------ OLD_CATEGORIES #{old_categories}"
puts "------------------------------ NEW_CATEGORIES #{new_categories}"
unless new_categories.empty?
Category.update_all("count=count+1", ["id IN (?)"], new_categories)
end
end
# Validations
validates :name, :description, :phone, presence: true
validates_uniqueness_of :name
validates :email, format: {with: /\A[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]+\z/}, allow_blank: true
validates :web, format: {with: URI::regexp(%w(http https))}, allow_blank: true
validates :fax, format: {with: /[0-9]/}, allow_blank: true
end
类别模型:
class Category < ActiveRecord::Base
attr_accessible :name, :count
# Validations
validates :name, presence: true
has_many :categorizations
has_many :companies, through: :categorizations
end
分类模型:
class Categorization < ActiveRecord::Base
belongs_to :category
belongs_to :company
validates_uniqueness_of :category_id, scope: :company_id
end
以下是日志:
Started PUT "/admin/companies/43" for 127.0.0.1 at 2012-05-07 20:39:28 +0800
Processing by Admin::CompaniesController#update as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"raDb5MWAViIOR6oYE5iJGNz8gio/WHM1H/mVYRHldxA=", "company"=>{"name"=>"ТЭДИ төв", "category_ids"=>["", "21", "22", "19"], "phone"=>"88574711", "email"=>"", "web"=>"", "fax"=>"", "address"=>"", "description"=>"<p>\r\n\tбы ыбө ыбө ыбө ыбөбыөыйб өыбөйыө</p>\r\n"}, "commit"=>"Update Company", "id"=>"43"}
AdminUser Load (0.7ms) SELECT "admin_users".* FROM "admin_users" WHERE "admin_users"."id" = 1 LIMIT 1
Company Load (0.5ms) SELECT "companies".* FROM "companies" WHERE "companies"."id" = $1 LIMIT 1 [["id", "43"]]
Category Load (0.5ms) SELECT "categories".* FROM "categories" WHERE "categories"."id" IN (21, 22, 19)
Category Load (0.4ms) SELECT "categories".* FROM "categories" INNER JOIN "categorizations" ON "categories"."id" = "categorizations"."category_id" WHERE "categorizations"."company_id" = 43
(0.1ms) BEGIN
Categorization Exists (0.4ms) SELECT 1 FROM "categorizations" WHERE ("categorizations"."category_id" = 22 AND "categorizations"."company_id" = 43) LIMIT 1
SQL (30.8ms) INSERT INTO "categorizations" ("category_id", "company_id") VALUES ($1, $2) [["category_id", 22], ["company_id", 43]]
(18.8ms) COMMIT
(0.1ms) BEGIN
Company Exists (0.8ms) SELECT 1 FROM "companies" WHERE ("companies"."name" = 'ТЭДИ төв' AND "companies"."id" != 43) LIMIT 1
------------------------------ [21, 19, 22]
------------------------------ []
------------------------------ CATEGORY_IDS: [21, 19, 22]
------------------------------ OLD_CATEGORIES [21, 19, 22]
------------------------------ NEW_CATEGORIES []
(0.2ms) COMMIT
我使用的是Rails 3.2.3。我不知道。请帮帮我?谢谢。全部更新不会触发活动记录回调或验证
update_all不会触发活动记录回调或验证
只需确保将所有相关更新放在一个事务中即可。还有一件事:Rails可以自行管理计数器。请看第4.1.2.4节:。只需确保将所有相关更新放在一个事务中。还有一件事:Rails可以自行管理计数器。请参阅第4.1.2.4节:。