-1
我嘗試寫一些代碼來滿足這個RSpec的要求(有刪節)自動改變量值
@book = Book.new
@book.title = "inferno"
@book.title.should == "Inferno"
我不知道人們會怎麼做@book.title
變化從「地獄」到「地獄「自動定義後,我也不知道在哪裏尋找。我查看了實例變量和初始化文檔的文檔,但解決方案從兩者都沒有明確。
我嘗試寫一些代碼來滿足這個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"
你必須自己決定這是否滿足您的需要或沒有,但你的基本思路。
什麼是「str」? – macsplean
這是setter方法的參數,即等號的右側值。例如,當您調用'@book.title ='foobar''時,字符串''foobar''將作爲參數提供。在這種情況下,這個參數被稱爲'str',但是您可以根據需要命名它。 –
好吧,在我看來,'self.title ='而不是'self [:title] ='或'write_attribute(:title,')可能更容易一些,但也許它並不重要,具體而言,我不確定 – macsplean