ActiveModel::Attributes가 너무 최고입니다.
7709 단어 ActiveModelRailsActiveRecord
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 커뮤니티
정말 고마워요.
Reference
이 문제에 관하여(ActiveModel::Attributes가 너무 최고입니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/alpaca_taichou/items/bebace92f06af3f32898텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)