2016-07-23 1 views
2

예를 들어 Ruby on Rails를 배우고 있습니다.Ruby : 한 클래스의 서브 클래스 후 [number]에 대한 문법 이름

class RemoveOrderListNumberAndStateFromOrderLists < ActiveRecord::Migration[5.0] 
    def up 
    remove_column :order_lists, :order_list_number 
    remove_column :order_lists, :state 
    end 

    def down 
    add_column :order_lists, :order_list_number, :string 
    add_column :order_lists, :state, :integer 
    end 
end 

내가 모르는 것은이 줄에 있습니다 : :이 명령은 의미

class RemoveOrderListNumberAndStateFromOrderLists < ActiveRecord::Migration[5.0] 

내가 아는 : 클래스를 생성, 그건입니다 여기 하나 개의 샘플 코드 마이그레이션 폴더에 참조 서브 클래스는 ActiveRecord::Migration이고 5.0 또한 프로젝트의 레일 버전입니다. 내가 모르는 것은 위의 경우에 [number]을 선언 할 수있는 루비 문법 이름입니다. 나는 유일한 방법이 배열이라고 생각하지만,이 경우에 맞지는 않습니다. 당신이, 당신이 경우에,이 ActiveRecord::Migration의 호환성 버전을 찾는 데 사용되는 것을 볼 줄을 source code을 선택하면

감사

+0

에서 클래스 메소드를 사용하는 방법에 대해 설명합니다. – MarsAtomic

답변

4

루비 언어에는 "신택스 설탕"이라고하는 많은 기능이 있습니다.이 기능을 통해 동일한 아이디어를 다양한 방식으로 표현할 수 있습니다. 설탕의 목적은 프로그래머가 그 아이디어를 가장 잘 이해할 수있는 방식으로 표현할 수있게하는 것입니다.

대괄호는 인수가있는 메소드를 호출하는 다른 방법 일뿐입니다. 기능상의 차이점은 없습니다. proc[]proc.call()라고하는 또 다른 방법이므로 대괄호는 단지 call을 숨기고 있습니다. 일반적으로 람다와 함께이 대괄호 만 볼 수 있습니다. 이런 형식의 표기법과 관련된 구체적인 "문법 이름"은 없습니다. 단지 표기법 일뿐입니다.

구체적으로이 클래스는 ActiveRecord::Migration에서 호출되어 어떤 마이그레이션 버전이 사용되고 있는지를 클래스에 알립니다. 참고 : Rails의 릴리스 버전을 사용하는 경우에는 해당 표기가 필요하지 않습니다. 베타 버전을 완성한 후에 제거해야합니다.

당신은 어디에서 볼 수 있으며 ActiveRecord::Migration의 왼쪽에 체크 표시를 클릭하여 하나를 받아 주시기 바랍니다 당신이 답변 중 하나를 만족하는 경우 GitHub repository

def self.[](version) 
     version = version.to_s 
     name = "V#{version.tr('.', '_')}" 
     unless Compatibility.const_defined?(name) 
     versions = Compatibility.constants.grep(/\AV[0-9_]+\z/).map { |s| s.to_s.delete('V').tr('_', '.').inspect } 
     raise "Unknown migration version #{version.inspect}; expected one of #{versions.sort.join(', ')}" 
     end 
     Compatibility.const_get(name) 
    end 
1

,이 때문에 마이그레이션이의 서브 클래스가 될 것이다 클래스 ActiveRecord::Migration::Current을 반환 것 그 계급.

현재 두 가지 버전 만 사용할 수 있습니다 : v4.2 및 v5.0.

관련 문제