跳至內容 跳至搜尋

Active Model API

包含物件與 Action Pack 和 Action View 互動所需的介面,使用不同的 Active Model 模組。它包含模型名稱自省、轉換、翻譯和驗證。此外,它允許您使用屬性雜湊初始化物件,就像 Active Record 所做的一樣。

最小實作可以是

class Person
  include ActiveModel::API
  attr_accessor :name, :age
end

person = Person.new(name: 'bob', age: '18')
person.name # => "bob"
person.age  # => "18"

請注意,預設情況下,ActiveModel::API 實作 persisted? 回傳 false,這是最常見的情況。您可能想在類別中覆寫它來模擬不同的場景

class Person
  include ActiveModel::API
  attr_accessor :id, :name

  def persisted?
    self.id.present?
  end
end

person = Person.new(id: 1, name: 'bob')
person.persisted? # => true

此外,如果您因為某些原因需要在初始化時執行程式碼 ( ::new ),請務必呼叫 super,如果您希望屬性雜湊初始化發生。

class Person
  include ActiveModel::API
  attr_accessor :id, :name, :omg

  def initialize(attributes={})
    super
    @omg ||= true
  end
end

person = Person.new(id: 1, name: 'bob')
person.omg # => true

有關其他可用功能的更詳細資訊,請參閱 ActiveModel::API 中包含的特定模組 (見下文)。

方法
N
P
包含的模組

類別公開方法

new(attributes = {})

使用指定的 params 初始化新的模型。

class Person
  include ActiveModel::API
  attr_accessor :name, :age
end

person = Person.new(name: 'bob', age: '18')
person.name # => "bob"
person.age  # => "18"
# File activemodel/lib/active_model/api.rb, line 80
def initialize(attributes = {})
  assign_attributes(attributes) if attributes

  super()
end

執行個體公開方法

persisted?()

表示模型是否已持續存在。預設為 false

class Person
  include ActiveModel::API
  attr_accessor :id, :name
end

person = Person.new(id: 1, name: 'bob')
person.persisted? # => false
# File activemodel/lib/active_model/api.rb, line 95
def persisted?
  false
end