Mam model, który ma wiele innych modeli, ale ten model musi mieć tylko 10 lub mniej identyfikatorów.

Powiedzmy, że tak, łazienka, kuchnia, salon, tak dla argumentów, a nowe rekordy prawdopodobnie nigdy nie będą musiały się zmieniać.

Jaki jest najlepszy sposób na stworzenie takiego modelu, który nie korzysta z tabeli bazy danych?

0
Joseph Le Brech 26 luty 2012, 19:50

2 odpowiedzi

Najlepsza odpowiedź

Mimo że kolekcja wierszy nigdy się nie zmienia, nadal warto mieć to jako tabelę w bazie danych, aby wykorzystać relacje ActiveRecord. Mniej wymyślnym przykładem może być tabela bazy danych zawierająca listę stanów USA. Jest bardzo mało prawdopodobne, aby to się zmieniło i prawdopodobnie miałoby tylko kilka kolumn (nazwa stanu i skrót stanu). Jednak przechowując je w bazie danych i wspierając je ActiveRecord, zachowujesz możliwość wykonywania przydatnych rzeczy, takich jak wyszukiwanie wszystkich użytkowników w danym stanie przy użyciu konwencjonalnej semantyki rails.

Biorąc to pod uwagę, alternatywą byłoby po prostu utworzenie klasy, którą trzymasz w katalogu modeli, która nie dziedziczy z ActiveRecord, a następnie albo zapełnij ją raz z bazy danych, gdy aplikacja się ładuje, albo po prostu wypełnij ją ręcznie.

Podobne pytanie zadano wczoraj, a jedna z odpowiedzi proponuje mechanizm wspierania czegoś podobnego do tego, co chcesz zrobić:

Jak stworzyć klasę statyczną reprezentującą to, co znajduje się w bazie danych?

0
Community 23 maj 2017, 14:48

To może nie są najlepsze praktyki, ale aby rozwiązać ten sam problem, właśnie określiłem kolekcję w moim modelu, tak jak poniżej:

ROOM_TYPES = [ "Bathroom", "Living Room", "Kitchen" ]

Następnie w widoku:

<%= f.select(:room_type, Project::ROOM_TYPES, {:prompt => '...'}) %>

(zastąp Project rzeczywistą nazwą modelu.)

Super proste, prawie bez konfiguracji. Widzę, jak trudno byłoby to utrzymać, ponieważ nie ma możliwości dodawania elementów bez dostępu do kodu Rails, ale szybko wykonuje to zadanie.

1
ellawren 26 luty 2012, 23:22