Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.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 更新前的ActiveRecord不起作用_Ruby On Rails_Ruby_Ruby On Rails 3_Activerecord - Fatal编程技术网

Ruby on rails 更新前的ActiveRecord不起作用

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 :

我不熟悉Rails。我有分类和公司模型,有很多分类。根据我的日志。我认为在更新之前,回调不起作用/请查看我的日志。更新后会调用它。/。 以下是我的公司模式:

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节:。