활성 레코드 연결

2186 단어
저는 현재 온라인 소프트웨어 엔지니어링 프로그램을 위한 첫 번째 Ruby/Sinatra 애플리케이션을 작업하고 있습니다. Active Record Associations에 대해 배운 내용과 이를 사용하여 액세스할 수 있는 모든 내장 메서드를 공유하고 싶었습니다.

많이있다



다른 클래스의 많은 인스턴스를 소유하는 한 클래스의 인스턴스입니다. 이 클래스는 자신이 소유한 모든 인스턴스에 대한 액세스 권한을 얻기 위해 has many instance 메서드를 복수화해야 합니다. 사용자는 많은 레시피를 가지고 있습니다.

class Actor < ActiveRecord::Base
    has_many :characters
end



class Show < ActiveRecord::Base
    has_many :characters
end

has_many 협회는 우리에게 17 가지 방법에 대한 액세스를 제공합니다

actors
actors<<(object, ...)
actors.delete(object, ...)
actors.destroy(object, ...)
actors=(objects)
actor_ids
actor_ids=(ids)
actors.clear
actors.empty?
actors.size
actors.find(...)
actors.where(...)
actors.exists?(...)
actors.build(attributes = {})
actors.create(attributes = {})
actors.create!(attributes = {})
actors.reload


속하다



has many 클래스가 소유한 인스턴스. 유일한 소유자 클래스에 대한 관계를 검색하기 위해 속하는 메서드를 단수로 지정합니다. 레시피는 한 명의 소유자에게 속합니다.

class Character < ActiveRecord::Base
    belongs_to :actor
    belongs_to :show
end


참조 일관성을 유지하려면 소유 테이블 마이그레이션의 소유자 열에 외래 키를 추가하십시오.

class CreateRecipes < ActiveRecord::Migration[6.1]
  def change
    create_table :characters do |t|
      t.belongs_to :actor
      t.belongs_to :show
    end
  end
end

belongs_to 협회는 우리에게 8 가지 방법에 대한 액세스를 제공합니다

character
character=(character)
build_character(attributes = {})
create_character(attributes = {})
create_character!(attributes = {})
reload_character
character_changed?
character_previously_changed?


다음을 통해 has_many:



이렇게 하면 두 소유자 클래스와 소유/연결 클래스 사이에 관계 브리지가 생성됩니다.

class Show < ActiveRecord::Base
    has_many :characters
    has_many :actors, through: :characters
end

좋은 웹페이지 즐겨찾기