Mam tabelę Produkty i chcę dodać kolumnę:
t.references :imageable, :polymorphic => true
Próbowałem wygenerować migrację w tym celu, wykonując:
$ rails generate migration AddImageableToProducts imageable:references:polymorphic
ale oczywiście robię to źle. Czy ktoś może coś zasugerować? Dzięki
Kiedy próbuję ręcznie wstawić go po wygenerowaniu migracji, zrobiłem to tak:
class AddImageableToProducts < ActiveRecord::Migration
def self.up
add_column :products, :imageable, :references, :polymorphic => true
end
def self.down
remove_column :products, :imageable
end
end
i nadal nie działa
ruby-on-rails
polymorphic-associations
rails-migrations
railslearner
źródło
źródło
Odpowiedzi:
O ile wiem, nie ma wbudowanego generatora skojarzeń polimorficznych. Wygeneruj pustą migrację, a następnie zmodyfikuj ją ręcznie zgodnie ze swoimi potrzebami.
Aktualizacja : musisz określić, którą tabelę zmieniasz. Zgodnie z tą odpowiedzią SO :
źródło
schema.rb
powinien zostać zaktualizowany, ale nie będzie o nim nic mówićpolymorphic
. Zamiast tego powinieneś zobaczyć rzeczywiste pola używane przez Railsy ( więcej informacji znajdziesz w Przewodniku po Railsach ).references
kolumny? Czy muszę to indeksować?imageable_type
i / lubimageable_id
w razie potrzeby.imageable_id
iimageable_type
działało. Dzięki za pomoc.To, co próbujesz zrobić, nie zostało jeszcze zaimplementowane w stabilnej wersji railsów, więc odpowiedź Michelle jest na razie właściwa. Ale ta funkcja zostanie zaimplementowana w szynach 4 i jest już dostępna w wersji krawędziowej w następujący sposób (zgodnie z tym CHANGELOG ):
źródło
add_reference :products, :imageable, polymorphic: true, index: true
{polymorphic}
trzeba uciec ze skorupą ryby, np.\{polymorphic\}
Możesz też wykonać następujące czynności:
źródło
Możesz spróbować
rails generate migration AddImageableToProducts imageable:references{polymorphic}
źródło
{
i}
trzeba uciec przynajmniej ze skorupą ryby, np.\{polymorphic\}