有没有更优雅的方法:
widget.notes.where(:author_id => a).first.message= widget.notes.where(:author_id => a).first.message << "Potato"
例如:
widget.notes.where(:author_id => a).first.message << "Potato"
widget.notes.where(:author_id => a).first.message <<! "Potato"
分别不修改或返回错误(因为没有
)<<!
操作符)
key: widget是widget的一个实例。小部件可以有注释。Notes有一个attr_accessible for:message。'a'只是一个用户实例。
这不是<<
不修改字符串的问题-它确实修改了字符串的位置。<<
的名字中可能没有!
,但它仍然像一个bang方法。如果您在示例代码中用gsub!
(其名称中确实有!
)的调用替换<<
,您可以很容易地看到这一点:它不会产生一点差异。
在您的示例中,您将返回未更改的字符串,因为widget.notes。Where (:author_id => a).first每次大概返回一个新对象,它将有自己独立的字符串。
进一步,如果message
对应于一个数据库列,而不是一个实例变量,我不确定是否调用变异的方法对它甚至会工作,因为它会规避调用ActiveRecord的(或任何ORM你正在使用)setter方法。在这里,使用+=
可能是最安全的选择。
这应该是你想要的:
note = widget.notes.where(:author_id => a).first
note.message += "Potato"
note.save