iT邦幫忙

2022 iThome 鐵人賽

DAY 5
0
Software Development

Rails Active Model系列 第 5

D-5 Active Model 擴充功能 - Attributes - 2

  • 分享至 

  • xImage
  •  

上一篇講解過了 attribute 的用法,這次再講講預設值的設定
只要在 attribute 的傳入參數加上 option default: (value),就可以指定預設值啦~

For example:

class MyClass
  include ActiveModel::Model
  include ActiveModel::Attributes
  # 不再贅述 :P
  
  attribute :title, :string, default: '預設值'
  # 如果建立物件時沒有傳入 key `title`,則會套用 "預設值"

  attribute :number, :integer
  # 沿用上一篇的設定,不套用預設值看看會怎樣
end

現在我們來 new 一個新的 form object,看看預設值是否會出來

obj = MyClass.new({})# 什麼都不傳入,看看他會長什麼樣子
obj.title
=> "預設值" # 真的有預設的字串

obj.number
=> nil # 沒指定預設值則是 nil

那如果,我們傳入一包 params 呢?

params = { title: 'This is Sparta!', number: '123'} # params 假設都是字串
obj = MyClass.new params
obj.title
 => "This is Sparta!" # 有傳就有

obj.number
 => 123 # 而且也會自動轉型,穩定發揮

要注意的是,如果傳入的 params 有該 key 而且值是 nil,是不會套用預設值的唷!

params = { title: nil , number: '3344'} # params 帶上 title 為 nil
obj = MyClass.new params
obj.title
 => nil # 此時不會套用預設值

obj.number
 => 3344

那既然相比較於 attr_accessor 多出了這麼多的功能,那有沒有其他使用上應該要注意的事情呢?
有的,下一篇會再介紹 attributeattr_accessor 不同之處,以及使用上該注意的一些事情。


上一篇
D-4 Active Model 擴充功能 - Attributes - 1
下一篇
D-6 傳入的 attribute 不會被 assign 為 instance variable !
系列文
Rails Active Model28
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言