我正在尝试编写一些代码来满足此RSpec要求(删节)
@book = Book.new
@book.title = "inferno"
@book.title.should == "Inferno"
我不确定一旦定义@book.title
如何自动从"地狱"更改为"地狱",我也不知道去哪里看。我已经查看了实例变量的文档和初始化的文档,但解决方案都不清楚。
您可以通过重写 setter 方法来实现此目的:
class Book < ActiveRecord::Base
# other stuff ...
def title=(str)
write_attribute(:title, str.capitalize)
end
end
或者,或者:
class Book < ActiveRecord::Base
# other stuff ...
def title=(str)
self[:title] = str.capitalize
end
end
您可能需要考虑其他处理,因为String#capitalize
可能不足以满足您的需求。例:
'foo'.capitalize
#=> "Foo"
'foo of bar'.capitalize
#=> "Foo of bar"
一种可能的解决方案如下:
'foo'.split.map(&:capitalize).join(' ')
#=> "Foo"
'foo of bar'.split.map(&:capitalize).join(' ')
#=> "Foo Of Bar"
但请注意,这会带来不同的问题。最值得注意的是,这将丢弃任何前导、尾随和重复的空格:
' foo of bar '.split.map(&:capitalize).join(' ')
#=> "Foo Of Bar"
您将不得不自己决定这是否满足您的需求,但您得到了基本的想法。