定义变量值后自动更改变量值

  • 本文关键字:变量值 改变 定义 ruby rspec
  • 更新时间 :
  • 英文 :


我正在尝试编写一些代码来满足此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"

将不得不自己决定这是否满足您的需求,但您得到了基本的想法。

最新更新