0

以下是困扰我的问题:

我有一个模型 Word,它有一个属性 article_count

但是,如果我使用:

w = Word.first    
w.article_count = 1
w.save

第一个词的article_count不会改变,日志显示:

Word Exists (0.4ms) ...

但我可以使用

w.update_attributes :article_count => 1

也许我误解了保存的功能,谁能给我解释一下?

=======================更新=======================

这是我的文章模型:

class Article < ActiveRecord::Base   
  attr_accessible :content, :title, :source, :url

  has_many :article_wordships, :dependent => :destroy
  has_many :words, :through => :article_wordships
  has_many :paragraphs, :dependent => :destroy

  alias_attribute :word_count, :article_wordships_count

  validates_uniqueness_of :title
end

这是我的代码:

Article.select(:title).all.each do |a|
  a.title = a.title.gsub(/\A.+?;\s(.+)/, '\1')
  a.save
end

运行代码后,文章没有任何变化。

这是控制台信息:

   1.9.3p194 :003 > a.save
   (0.2ms)  BEGIN
  Article Exists (0.6ms)  SELECT 1 AS one FROM `articles` WHERE (`articles`.`title` = BINARY 'A Shared State of Defeat' AND `articles`.`id` != 178) LIMIT 1
   (0.9ms)  UPDATE `articles` SET `title` = 'A Shared State of Defeat', `updated_at` = '2012-09-08 02:58:33' WHERE `articles`.`id` = 178
   (2.2ms)  COMMIT
 => true 

既省又省!返回真。

奇怪的是,有时它工作,有时它不工作!

我要生气了...

4

1 回答 1

2

我不确定您的意思是“有时它有效,有时它不起作用!” 它似乎在您给出的示例中有效。如果不工作是指它并不总是发布更新,则可能是该行不会更改标题。ActiveRecord 进行脏检查,如果 title 的值没有改变,它不会发出更新。

a.title = a.title.gsub(/\A.+?;\s(.+)/, '\1')
于 2012-09-07T19:26:48.053 回答