Ruby on Rails 의 ActiveRecord 프로 그래 밍 안내

3958 단어 RailsActiveRecord
부족 한 ActiveRecord(표 의 이름,메 인 키 등)를 바 꾸 지 마 십시오.아주 좋 은 이유 가 있 는 경 우 를 제외 하고(제어 되 지 않 는 데이터베이스 와 같 습 니 다).
    매크로 스타일 의 방법 을 분류 정의 앞 에 놓 기(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

    문 서 를 보면 사용 에 대한 정 보 를 더 얻 을 수 있 습 니 다.

좋은 웹페이지 즐겨찾기