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 

保存も保存も!true を返します。

不思議なことに、うまくいくときもあれば、うまくいかないときもあります。

私は怒っている...

4

1 に答える 1

2

「うまくいくときもあれば、うまくいかないときもある!」という言葉の意味がよくわかりません。あなたが与える例ではうまくいくようです。動作しないとは、常に更新を発行するとは限らないことを意味する場合、この行はタイトルを変更しない可能性があります. ActiveRecord はダーティ チェックを行い、title の値が変更されない場合は更新を発行しません。

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