以下是困扰我的问题:
我有一个模型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。
奇怪的是,有时候它会起作用,有时它不起作用!
我生气了......
答案 0 :(得分:2)
我不确定你的意思“有时它的工作,有时它不起作用!”它似乎适用于您给出的示例。如果不工作意味着它并不总是发布更新,则可能是此行不会更改标题。 ActiveRecord执行脏检查,如果title的值没有改变,它将不会发出更新。
a.title = a.title.gsub(/\A.+?;\s(.+)/, '\1')