To jest długa droga okrągły, ale jeśli nie zostały jeszcze wdrożone pierwotnie następnie można tworzyć modele w ten sposób. Poniższa metoda opisuje zmianę istniejącej bazy danych.
1) Utwórz nowy model dla dostawców usług poczty elektronicznej:
$ rails g model provider name
2) To stworzy swój model z ciąg nazwy i znaczników czasu. Tworzy również migrację które musimy dodać do schematu z:
$ rake db:migrate
3) dodać migrację do dodawania Dostawców ID na Kontakt:
$ rails g migration AddProviderRefToContacts provider:references
4) Przejdź na pliku migracji aby sprawdzić, że wygląda OK, a migracja że zbyt:
$ rake db:migrate
5) Ok, teraz mamy provider_id, nie musimy już oryginalnego email_provider ciąg:
$ rails g migration RemoveEmailProviderFromContacts
6) Wewnątrz pliku migracji, dodać zmianę, która będzie wyglądać mniej więcej tak:
class RemoveEmailProviderFromContacts < ActiveRecord::Migration
def change
remove_column :contacts, :email_provider
end
end
7) Gdy to zrobisz, migrację zmiany:
$ rake db:migrate
8) Weźmy w tej chwili zaktualizuj nasze modele:
Kontakt: belongs_to :provider
Dostawca: has_many :contacts
9) Następnie uruchamiamy rozwijanej logikę w _form.html.erb częściowy w widokach:
<div class="field">
<%= f.label :provider %><br>
<%= f.collection_select :provider_id, Provider.all, :id, :name %>
</div>
10) Wreszcie, musimy dodać samych provders. Jednym ze sposobów top zrobić byłoby użyć pliku nasion:
Provider.destroy_all
gmail = Provider.create!(name: "gmail")
yahoo = Provider.create!(name: "yahoo")
msn = Provider.create!(name: "msn")
$ rake db:seed
, więc model będzie contact.rb, ale gdzie powinienem umieścić tę logikę drop-down? przepraszam za naiwne pytanie, jestem nowy w rozwoju RoR – iCyborg
Twoje pytanie jest OK. Jeśli przyjrzysz się strukturze 'app/views/contacts', znajdziesz plik' _form.html.erb'. Możesz spróbować go tam umieścić. Ten "widok częściowy" jest odpowiedzialny zarówno za tworzenie, jak i aktualizowanie działań wygenerowanego przez ciebie rusztowania. –
zaleca przeniesienie zamówienia (: nazwa) do zakresu (który jest metodą) w modelu. Nie jest to wielka sprawa, ale z biegiem czasu okaże się, że posiadanie tego, co jest w istocie logiką biznesową w ten sposób (zamówienie) na szablonie widoku, staje się bałaganem. Przenieś to do kontrolera lub najlepiej modelu i udostępnij tam zakres, z którego możesz skorzystać. Jeden przykład - jeśli skończysz z trzema ekranami lub szablonami, które korzystają z menu rozwijanego, posiadanie kolejności w widokach oznacza duplikację 3 X. Posiadanie go w modelu oznacza, że jest on zdefiniowany w jednym miejscu i jest to jedyne miejsce, w którym można go zmienić, co jest dobre. –