Ruby on Rails 의 ActiveRecord 프로 그래 밍 안내
3958 단어 RailsActiveRecord
매크로 스타일 의 방법 을 분류 정의 앞 에 놓 기(hasmany,validates,등등).
선 호 hasmany:through 가 has 보다 낫다and_belongs_to_many。 has 사용many:through 는 join 모델 에 추가 속성 및 검증 을 허용 합 니 다.
# has_and_belongs_to_many
class User < ActiveRecord::Base
has_and_belongs_to_many :groups
end
class Group < ActiveRecord::Base
has_and_belongs_to_many :users
end
# - using has_many :through
class User < ActiveRecord::Base
has_many :memberships
has_many :groups, through: :memberships
end
class Membership < ActiveRecord::Base
belongs_to :user
belongs_to :group
end
class Group < ActiveRecord::Base
has_many :memberships
has_many :users, through: :memberships
end
새로운 것 을 사용 하 세 요.일반적인 인증 이 한 번 이상 사용 되 거나 인증 이 정규 표현 맵 일 때 일반적인 vaidator 파일 을 만 듭 니 다.
#
class Person
validates :email, format: { with: /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i }
end
#
class EmailValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value)
record.errors[attribute] << (options[:message] || 'is not a valid email') unless value =~ /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i
end
end
class Person
validates :email, email: true
end
모든 관용 검증 기 는 공 유 된 gem 에 놓 아야 한다.이름 이 붙 은 역할 영역(scope)을 자 유 롭 게 사용 합 니 다.
class User < ActiveRecord::Base
scope :active, -> { where(active: true) }
scope :inactive, -> { where(active: false) }
scope :with_orders, -> { joins(:orders).select('distinct(users.id)') }
end
이름 이 붙 은 역할 도 메 인 을 lambda 에 패키지 하여 타성 적 으로 초기 화 합 니 다.
#
class User < ActiveRecord::Base
scope :active, where(active: true)
scope :inactive, where(active: false)
scope :with_orders, joins(:orders).select('distinct(users.id)')
end
#
class User < ActiveRecord::Base
scope :active, -> { where(active: true) }
scope :inactive, -> { where(active: false) }
scope :with_orders, -> { joins(:orders).select('distinct(users.id)') }
end
lambda 와 매개 변수 가 정의 하 는 역할 영역 이 너무 복잡 해 졌 을 때 더 좋 은 방법 은 같은 용도 로 분류 하 는 방법 을 만 들 고 activeRecord:Relation 대상 을 되 돌려 주 는 것 이다.너 도 이렇게 더욱 간단 한 역할 영역 을 정의 할 수 있다.
class User < ActiveRecord::Base
def self.with_orders
joins(:orders).select('distinct(users.id)')
end
end
업데이트 주의attribute 방법의 행동.모델 인증 을 실행 하지 않 습 니 다(update 와 는 다 릅 니 다.attributes)모델 상 태 를 망 칠 수 있 습 니 다.사용자 의 우호 적 인 인터넷 주 소 를 사용 하 다.사이트 주소 에 설명 적 인 모델 속성 을 표시 합 니 다.id 뿐만 아니 라.
달성 할 수 있 는 방법 은 한 가지 가 아니다.
복사 모형 의 toparam 방법.이것 은 레일 스 가 대상 에 게 인터넷 주 소 를 구축 하 는 방법 이다.결 성 된 실습 은 이 id 의 기록 을 문자열 형식 으로 되 돌려 줍 니 다.그것 은 다른 인간 이 읽 을 수 있 는 속성 에 의 해 복 사 될 수 있다.
class Person
def to_param
"#{id} #{name}".parameterize
end
end
웹 주소 우호(URL-friendly)의 수치 로 변환 하기 위해 서 문자열 은 parameterize 를 호출 해 야 합 니 다.액 티 브 레코드 의 find 방법 을 찾 을 수 있 도록 대상 id 를 시작 에 두 어야 합 니 다.* 이 friendly 사용 하기id gem。이것 은 id 로 인류 가 읽 을 수 있 는 인터넷 주 소 를 만 드 는 것 이 아니 라 설명 적 인 모델 속성 을 사용 할 수 있 습 니 다.
Ruby
class Person
extend FriendlyId
friendly_id :name, use: :slugged
end
문 서 를 보면 사용 에 대한 정 보 를 더 얻 을 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
새로운 UI의 Stripe Checkout을 Rails로 만들어 보았습니다.Stripe의 옛 디자인인 Stripe의 구현 기사는 많이 있습니다만, 지금 현재의 디자인에서의 도입 기사는 발견되지 않았기 때문에 투고합니다. Stripe의 체크아웃을 stripe의 문서라든지 stackoverfl...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.