2012-07-26 11 views
14

Używam szyn 3.2.6 i potrzebuję utworzyć WIDOK bazy danych. Jak zwykle stworzyłem migrację i próbowałem osiągnąć cel za pomocą metody execute.Railsowanie 3.2.6 i tworzenie widoków bazy danych za pomocą migracji

Niestety, migracja generuje tabelę, a nie widok. Czemu?

Dziękujemy wcześniej, Mauro

UPDATE:

chciałbym mieć coś w następujący sposób:

class CreateMyView < ActiveRecord::Migration 
    def self.up 
    execute <<-SQL 
     CREATE VIEW my_view AS SELECT ... 
    SQL 
    end 
    def self.down 
    execute <<-SQL 
     DROP VIEW my_view 
    SQL 
    end 
end 

Niestety ta migracja tworzy tabelę ...

AKTUALIZACJA: poprzedni kod działa! Realizowałem rake db: reset zamiast rake db: migrate: reset (mój błąd)

+1

Nie jestem pewien, czy możliwe jest wygenerowanie takiej migracji. Użyj surowego SQL do utworzenia widoku. –

+0

Robię to samo (z wyjątkiem tego, że używam def i down, nie def. Self.up i def self.down - czy istnieje różnica?) I otrzymuję to samo zachowanie: tworzy widok kiedy uruchom migrację, ale dodaje polecenie create_table do pliku schema.rb. – Ladlestein

Odpowiedz

2

Wygląda na to, że odpowiedziałeś na własne pytanie, ale podam pokrewną sugestię. Wypróbuj rails_sql_views gem. Ten link prowadzi do oryginalnego repozytorium na GitHub. Wygląda jednak na to, że nie jest już dłużej utrzymywany. Warto spojrzeć na network graph i wypróbować jedno z wideł. Nie jestem pozytywny, że którykolwiek z widelców obsługuje Rails 3.2.6, ale proponuję przejrzeć je. Christian Eichhorn added support for the mysql2 adapter około trzech lat temu.

2

Zrobiłem klejnot o nazwie rails_db_views, który jest kompatybilny z Rails 4 i nadal jest utrzymywany.

Pozdrawiam,

Yacine.

+0

Witaj Yacine, witamy w StackOverflow. Zamiast wskazywać na zewnętrzny przykład na githubie, byłoby to bardziej przydatne dla innych szukających rozwiązania, gdybyś mógł określić tutaj, co zrobiłeś, aby rozwiązać problem. –

+0

Witaj Amos! Dzięki za komentarz. W rzeczywistości problem polega na tym, że system migracji, tak jak robiono to w Railsach, nie jest przeznaczony do obsługi widoków ... Więc nie ma "prostego" systemu i myślę, że musisz zaimplementować nowy sposób zarządzania widokami. Dlatego podałem to rozwiązanie;) – Yacine

Powiązane problemy