ActiveModel::Attributes가 너무 최고입니다.

Ruby on Rails 5.2.0.beta2 가 나와 오랜.

나는 Rails를 좋아하는 아이이기 때문에

사내 신규 사업이나 사외에서 도와주는 벤처 기업에서는
물론 Rails5.2를 사용하여 개발하고 있다.

이미 새로운 Rails에 관한 기사는 몇 가지가 있지만
개인적으로, 가장 임팩트가 컸던 것은 ActiveModel::Attributes가 도입된 것이다.

대망의 ActiveModel::Attributes


ActiveModel::Attributes 그리고 무엇이 바뀌었는가? 그렇다면,
지금까지 ActiveRecord에서만 사용할 수 있었던 일부 기능이 ActiveModel에서도 사용할 수 있게 되었을 뿐이다.

아니, 하지만!

지금까지 ActiveModel의 가장 큰 약점은
바로 이 ActiveModel::Attributes 가 없었던 것이라고 생각한다.

그것이 Rails5.2에서 사용할 수 있게 된 것이다.
이런 기쁜 일은 없다.

모두 사랑 .attribute



Rails5.1계에서도 사용할 수 있었다 .attribute
ActiveRecord에는 Attribute API라는 인터페이스 (?)가 있으며,
유형 정보의 변환은 별다른 생각 없이 투명하게 처리될 수 있다.
class User < ApplicationRecord; end

id = '1' # 文字列
user = User.new(id: '1')
user.id  #=> 1 数値に変換されている

그리고 이 유형 변환은 정의를 덮어쓸 수도 있습니다.
class User < ApplicationRecord
  attribute :time_zone, :string, default: -> { Time.zone.name }
  attribute :confirmed, :boolean, default: false
end

user = User.new
user.time_zone == Time.zone.name #=> true
user.confirmed == false          #=> true

독자적인 형태 변환도 OK이므로, Money 등의 클래스를 정의해 형태 변환을 실시시킬 수도 있다.
컬럼이 없어도 OK이므로 attr_accesor 대신 사용할 수 있습니다.

뛰어난 편리하다.
그러나 ActiveRecord에서만 사용할 수 있는 것이다.

자, ActiveModel의 이야기입니다.



7 Patterns to Refactor Fat ActiveRecord Models
많은 프로젝트에서 FormObject 이나 ServiceObject(っぽいもの) 를 볼 기회가 늘었다.

모두 FormObject를 ActiveModel로 정의하지만
그 형 변환에는 정해진 방법이 없었다.
class RegistrationForm
  include ActiveModel::Model

  attr_accessor :accepted
end

RegistrationForm.new(xxx_params).accepted #=> 型はなに??

그리고 그 해결책은 사람마다 다양합니다.
이런 최선책은 없었다.
class RegistrationForm
  include ActiveModel::Model

  attr_reader :accepted

  # まともな変換
  def accepted=(value)
    @accepted = ActiveModel::Type.lookup(:boolean).cast(value)
  end

  # なんてこった...
  def accepted=(value)
    @accepted = value == '1'
  end
end

원래, 기술량도 많고 이케테나이감이 있었습니다.

이봐, 여기서 ActiveModel::Attributes 입니다.



드디어 질서가 유지되는 시대가 되었습니다..attribute 가 ActiveModel에서도 사용할 수 있게 되었습니다.
class RegistrationForm
  include ActiveModel::Model
  include ActiveModel::Attributes

  attribute :accepted, :boolean, default: false
end

이제, 대흥분입니다.

정말 간단합니다.
누구나 같은 글쓰기가 된다.
AttributeMethods도 사용할 수 있습니다 ....

고맙습니다. 고맙습니다.

Rails5.1이라면 아직 사용할 수 없다.



사용할 수 없습니다, 그렇습니다.
사내 사람과 이야기하고 다른 프로젝트에서도 .attribute 사용하고 싶다는 이야기가 있었기 때문에

그것 같은 것을 사용할 수 있도록했습니다.

# 다음 주 정도에는 ruby ​​gems에 나올 것일까 같은 이름으로 이미 gem이 존재했기 때문에, gem push 할 수 없어...! 모두 같은 생각을 하는 거야. .
htps : // 기주 b. 코 m / 아 파카 tc / 아 c ゔ
gem 'active_model_attributes', github: 'alpaca-tc/active_model_attributes'
class YourModel
  include ActiveModel::Model
  include ActiveModelAttributes # Rails5.2になったら、ActiveModel::Attributesに置き換えるだけ。

  attribute :accepted, :boolean, default: false
end

이것으로, 매일의 개발이 조금 행복해질 것 같습니다.

매년 매우 흥분하는 업데이트를 제공하는 Rails 커뮤니티
정말 고마워요.

좋은 웹페이지 즐겨찾기