我正在尝试编写一些代码来满足此RSpec要求(删节)
@book = Book.new
@book.title = "inferno"
@book.title.should == "Inferno"
我不确定如果@book.title
定义后会自动从“inferno”变为“Inferno”,我也不知道在哪里看。我查看了实例变量的文档和初始化的文档,但解决方案从两者都不清楚。
答案 0 :(得分:3)
您可以通过覆盖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"
你必须自己决定这是否符合你的需要,但你得到了基本的想法。