5

Szukam opinii na temat mojego obecnego planu wdrażania niestandardowych pól w szynach. Jestem nowy w rozwoju rails i aplikacji i doceniam wszelkie uwagi bardziej doświadczonych osób.Niestandardowe pola w Railsach, które działają jako szablon dla przyszłych wpisów.

Tło

Aplikacja: Śledzić żywności i napojów degustacji.

Co Próbuję modelu

  • Użytkownik tworzy nowy typ próbki.
  • Nazywają go: „Wino”
  • Decydują dla swojej firmy, chcieliby, aby śledzić z następujących cech: pochodzenie, winogrono, firma, rodzaj elewacji, utrzymując temperaturę i inne.
  • Jedynymi założeniami na temat typu próbki, którą wykonała moja baza danych, jest to, że ma ona nazwę. kawa, wino itp.) pozostałe są polami niestandardowymi określonymi przez użytkownika.

Teraz, gdy został utworzony typ próbki.

  • Użytkownik zaczyna tworzyć próbki wina typu próbki.
  • Wybierają utworzyć próbkę, wybierz rodzaj wina.
  • Pola, które muszą wypełnić, to te, które podano wcześniej.
  • pochodzenia włożyli: Francja, w rodzaju winogron: włożyli Chardonnay, etc ..

-

Mój plan podejście jest następujące:

Gdy użytkownik tworzy typ próbki, przechowuje niestandardowe pola jako tablicę lub w jakimś formacie łańcuchowym i przechowuje je pod kolumną o nazwie dane.

SampleType
nazwa
wino

dane
[origin, grape_type, company, ...]

Gdy użytkownik chce utworzyć próbkę typu Wino: Patrzę próbkę rodzaj wina, dla każdego klucza w kolumnie danych, tworzy fo pola rm. Gdy użytkownik przesyła dane, tworzę skrót wszystkich nazw pól niestandardowych i odpowiadających im danych.I szeregować je i przechowywać go w hash w kolumnie danych jak takie:

Sample
typu
wino

dane
{ origin: "France", grape_type: "Pinot Grigio, ... }

Mój plan w tej chwili używać hstore PostgreSQL do implementacji mieszania w kolumnie danych.

Moje pytania są następujące:

  1. Czy to ważne rozwiązanie dla co usiłuję zrobić?
  2. Czy napotkasz problemy, gdy użytkownicy zmieniają swoje niestandardowe pola?
  3. Jakieś inne sprawy, które powinienem wziąć pod uwagę?
  4. Czy mongodb i inne takie bazy danych są lepszym wyborem dla tego typu modelu?

Byłem przy użyciu następujących linków jako odniesienie: http://schneems.com/post/19298469372/you-got-nosql-in-my-postgres-using-hstore-in-rails http://blog.artlogic.com/2012/09/13/custom-fields-in-rails/

Jak również wiele innych postów przepełnienia stosu, jednak żadne z nich nie używają go w sposób wspomniany powyżej.

Wszelkie uwagi są mile widziane.

Odpowiedz

2

jtgi, robiąc coś takiego więcej razy, niż chcę pamiętać, moja pierwsza odpowiedź brzmiała: "Uciekaj!" Z mojego doświadczenia wynika, że ​​wszystko, co definiuje użytkownik, jest koszmarnym, hackowskim koszmarem. Wkrótce ktoś zapyta: "czy mogę szukać winogron?" lub "Chcę móc wprowadzić wiele wartości dla winogron". I tak dalej, a znienawidzisz siebie na zawsze, idąc tą drogą. :-)

To powiedziawszy, myślę, że twoje podejście jest całkiem przyzwoite. Aby odpowiedzieć bezpośrednio na pytania:

  1. Tak, to jest prawidłowe podejście.

  2. Tak, napotkasz problemy, gdy użytkownicy zmienią wybrane pola niestandardowe. (patrz wyżej)

  3. Zobacz kilka uwag poniżej.

  4. Może być. Poszedłem tam, zanim przeczytałem twoje czwarte pytanie. Z twoim polem => wartość hash, w pewnym sensie wdrażasz rozwiązanie noSQL, ale nie będzie to łatwe do zaimplementowania wyszukiwań, wyszukiwań itp.

Niektóre myśli:

  • myślę, że będzie zebrać dane w kolumnie db, zamiast przy użyciu funkcji dB. W ten sposób jest to czysty Ruby i nie zależy od typu db. Zobacz http://www.ruby-doc.org/core-1.9.3/Marshal.html. Robię to, aby teraz buforować niektóre dane w aplikacji i jest całkiem sprytnie. Być może będziesz musiał podać dane (l) w każdym razie, jeśli chcesz zakończyć przechowywanie obiektów Ruby bardziej złożonych niż łańcuchy.

  • Tak czy owak prawdopodobnie niedługo się to uda, więc planowałbym zapisać jakieś "metadane" na temat atrybutów, podczas gdy ty w tym jesteś. Np. "Grape" to String, maksymalna długość 20, "rating" to liczba całkowita z przedziału od 0 do 100. W ten sposób możesz sprawić, że twoja forma będzie trochę ładniejsza i przeprowadzi podstawową walidację.

  • Kiedy nienawidzisz tej funkcji, możesz mnie pamiętać. :-)

+0

scrozier, dziękuję za odpowiedź. Planowałem także wdrażanie podstawowych narzędzi analitycznych, wyszukiwanie i sortowanie również w tych dziedzinach, choć teraz jestem bardziej zmęczony ich implementacją. Czy nie ma żadnego wzorca do robienia tego typu rzeczy dobrze, wydaje się, że CMS będzie musiał przez cały czas radzić sobie z tego rodzaju problemem. Pozostawię pytanie otwarte na trochę dłużej, dopóki nie przyjmiemy odpowiedzi. – jtgi

Powiązane problemy