0

有带有属性注释的模型批准(文本类型)

def Ratification < ActiveRecord::Base
  attr_accessor :add_comment
  def add_comment=(text)
    self.comment ||= ""
    self.comment << "\r\n" + text
  end
end

如果我使用add_comment=在我保存对象之前就可以了。保存评论更改后被删除。

>> r = Ratification.last
  Ratification Load (0.6ms)   SELECT * FROM `ratifications` ORDER BY ratifications.id DESC LIMIT 1
=> #<Ratification id: 8, user_id: 686, comment: "dasads", created_at: "2010-06-25 13:16:24", updated_at: "2010-06-25 13:38:36">
>> r.comment
=> "dasads"
>> r.add_comment="text"
=> "text"
>> r.comment
=> "dasads\r\ntext"
>> r.save
  SQL (0.7ms)   BEGIN
  SQL (0.2ms)   COMMIT
=> true
>> r.reload
  Ratification Load (1.6ms)   SELECT * FROM `ratifications` WHERE (`ratifications`.`id` = 8) 
=> #<Ratification id: 8, user_id: 686, comment: "dasads", created_at: "2010-06-25 13:16:24", updated_at: "2010-06-25 13:38:36">
>> r.comment
=> "dasads"

为什么?!

导轨 2.3.8 红宝石 1.8

4

1 回答 1

1

Hrrrm ......这很奇怪,当我尝试这样做时,我在我的 rails 应用程序中看到了类似的行为:

@s.name << "test"

然后重新加载...原来的名称正在重置!

但是,如果我这样做 @s.name += "test"

然后即使在重新加载后,新名称也会被保存。

我不确定为什么 << 会这样,但我通常在所有情况下都默认为 += ,所以我以前从未注意到它。更改为 += 对您有帮助吗?

编辑:查看 API,可能是因为 << 修改了原始字符串,而 + 或 += 生成了一个包含旧字符串的新字符串?也许 Rails 以某种方式只保存它标记为新的东西(而不是修改?)

于 2010-06-25T15:23:32.467 回答