참조를 다형성으로 만들기 위해 마이그레이션을 생성하는 방법


121

Products 테이블이 있고 열을 추가하고 싶습니다.

t.references :imageable, :polymorphic => true

다음을 수행하여 마이그레이션을 생성하려고했습니다.

$ rails generate migration AddImageableToProducts imageable:references:polymorphic

하지만 분명히 잘못하고 있습니다. 누구든지 제안 할 수 있습니까? 감사

마이그레이션을 생성 한 후 수동으로 넣으려고 할 때 다음과 같이했습니다.

class AddImageableToProducts < ActiveRecord::Migration
  def self.up
    add_column :products, :imageable, :references, :polymorphic => true
  end

  def self.down
    remove_column :products, :imageable
  end
end

그리고 그것은 여전히 ​​작동하지 않았습니다


대답은 아니지만 혼동을 피하기 위해 제품에 대한이 열을 원하십니까? 레일 가이드에는 제품 예제도 있고 칼럼은 Pictures guides.rubyonrails.org/…에 있습니다.
atomkirk

답변:


109

내가 아는 한 다형성 연관을위한 내장 생성기는 없습니다. 빈 마이그레이션을 생성 한 다음 필요에 따라 직접 수정합니다.

업데이트 : 변경할 테이블을 지정해야합니다. 이 SO 대답 에 따르면 :

class AddImageableToProducts < ActiveRecord::Migration
  def up
    change_table :products do |t|
      t.references :imageable, polymorphic: true
    end
  end

  def down
    change_table :products do |t|
      t.remove_references :imageable, polymorphic: true
    end
  end
end

Brandon에게 대단히 감사합니다. 마이그레이션을 실행할 수있었습니다. 그래도 궁금해서 : polymorphic => true로 만들고 schema.rb를 연 후에 스키마에서도 볼 수 있습니까?
railslearner

마이그레이션을 실행 한 후을 (를) schema.rb업데이트해야하지만에 대한 내용은 표시되지 않습니다 polymorphic. 대신 Rails가 사용하는 실제 필드가 표시되어야합니다 ( Rails 가이드 에 자세한 정보가 있음).
Michelle Tilley 2011

2
references열에 인덱스를 어떻게 추가 합니까? 색인을 생성해야합니까?
mrudult 2014

@mrudult 내가 착각하지 않았다면 필요한 경우 직접 추가해야합니다. 마이그레이션 파일에서 평소대로 인덱스를 추가 imageable_type하거나 imageable_id필요에 따라 추가 할 수 있습니다 .
Michelle Tilley 2014

2
예. 색인을 추가 imageable_id하고 imageable_type작동했습니다. 당신의 도움을 주셔서 감사합니다.
mrudult 2014

266

당신이하려는 것은 아직 안정된 버전의 레일에서 구현되지 않았기 때문에 Michelle의 대답이 현재로서는 옳습니다. 그러나이 기능은 레일 4에서 구현 될 것이며 이미 다음과 같이 에지 버전에서 사용할 수 있습니다 (이 CHANGELOG 에 따라 ).

$ rails generate migration AddImageableToProducts imageable:references{polymorphic}

1
4.2에서 이것을 시도했고 이것이 버그, zsh 또는 다른 것인지 확실하지 않지만 명령 줄은 다음과 같이 각 다형성 문자가있는 일련의 참조 (유형)로 해석되었습니다. t.referencesp : imagable , treferenceso : 등 광상,
OzBarry

10
@OzBarry, zsh에서는 중괄호를 이스케이프해야합니다. $ rails generate migration AddImageableToProducts imageable : references \ {polymorphic \}
chad_

4
궁금한 사람을 위해 다음을 포함하는 변경 방법으로 마이그레이션을 생성합니다.add_reference :products, :imageable, polymorphic: true, index: true
stevenspiel

1
비계에서 동일한 것을 사용하려는 사람을 위해 이것은 비계에서도 작동합니다. 감사! rijks
sghosh968

2
{polymorphic}예를 들어, 물고기 껍질로 이스케이프 할 필요가\{polymorphic\}
도리안

36

다음을 수행 할 수도 있습니다.

class AddImageableToProducts < ActiveRecord::Migration
  def change
    add_reference :products, :imageable, polymorphic: true, index: true
  end
end

16

당신은 시도 할 수 있습니다 rails generate migration AddImageableToProducts imageable:references{polymorphic}


3
{그리고 }최소한 어패류로 탈출해야합니다. 예\{polymorphic\}
Dorian

1
다음은 이에 대한 문서 링크입니다 : edgeguides.rubyonrails.org/…
Giovanni Benussi

감사합니다 Giovanni, 그것은 매우 유용합니다.
hutusi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.