2011-11-09 11 views
6

Istnieje wiele samouczków, które pokazują, jak utworzyć instrukcje modelu dla relacji has_many: through w Railsach, ale nie ma wielu artykułów związanych z proces tworzenia formularzy do tworzenia i edycji tych relacji. Szukam pomocy (lub dobrych przykładów), jak stworzyć interfejs, który pozwoli użytkownikom zarządzać tego typu relacjami w aplikacji Rails.Tworzenie kontrolerów i widoków dla relacji has_many: through w Railsach 3

Oto scenariusz:

Mam użytkowników, związkach, i sportowców. Użytkownik może mieć relację z sportowcem w różnych rolach: Coach, Mentor, Rodzic lub Fan.

Oto moje modele:

class User < ActiveRecord::Base 
    has_many :relationships 
    has_many :athletes, :through => :relationships 
end 

class Athlete < ActiveRecord :: Base 
    has_many :relationships 
    has_many :users, :through => :relationships 
end 

class Relationship < ActiveRecord :: Base 
    belongs_to :users 
    belongs_to :athletes 
end 

Tak więc, następnym krokiem jest zbudowanie widoków i kontrolerów, które pozwala mi na tworzenie relacji użytkownik-sportowca (ze trener, rodzic, etc rola), edytuj związek lub zniszcz związek.

Ostatecznie moim celem jest stworzenie scenariusza, w którym użytkownicy będą mogli tworzyć sportowców i wybrać powiązaną relację.

Niestety, nie mogę znaleźć żadnych konkretnych samouczków lub odniesień, które dają mi znacznie więcej niż instrukcje do modelu lub przykład dla relacji has_many.

Jeśli ktoś ma link lub przykład, który może rozwiązać ten problem na prostym poziomie, powinienem być w stanie dostosować resztę.

Odpowiedz

5

Relacja, jaka panuje między użytkownikiem a modelem sportowca, jest w istocie relacją has_and_belongs_to_many (HABTM). Przechodząc tam iz powrotem wydaje się, że nie masz pojęcia, jaki będzie najlepszy sposób na stworzenie tych relacji.

Dobre miejsce na rozpoczęcie czytania znajduje się w dokumentacji stowarzyszeń ActiveRecord, w szczególności pod numerem the documentation for HABTM relationships.

Twoja konfiguracja modelu jest w porządku. Teraz, gdy już masz konfigurację relacji HABTM, oto, co możesz zrobić. Załóżmy, że zarówno Twój sportowiec, jak i model użytkownika są bardzo proste i nie mają nic oprócz atrybutu name, który jest ciągiem znaków. Teraz można zrobić kodu takiego (to wyjście konsoli z konsoli szyn):

User.create(:name => "Jeff") 
usr = User.first 
=> #<User id: 1, name: "Jeff"> 
usr.athletes 
=> [] 
atl = usr.athletes.create(:name => "Mike") 
=> #<Athlete id: 1, name: "Mike"> 

Linia powyżej będzie utworzyć użytkownika o nazwie Mike i automatycznie utworzyć wpis relacji z odpowiednimi atrybutami połączyć dwa . Więc teraz, jeśli nazywają to:

usr.athletes 
=> [#<Athlete id: 1, name: "Mike">] 

Teraz, jeśli chcesz, aby umożliwić użytkownikowi dyktować jaki jest związek między nimi a sportowca po stworzeniu sportowca, można skonfigurować klasa związku mieć relation pole typu string, a podczas tworzenia relacji (jak ja po prostu wyświetlane powyżej), można wtedy zrobić coś takiego:

rel = usr.relationships.where(:user_id => usr.id, :athlete_id => atl.id).first 
=> #<Relationship id: 1, user_id: 1, athlete_id: 2, :relation => nil> 
rel.relation = "Friend" 
rel.save 
=> #<Relationship id: 1, user_id: 1, athlete_id: 2, :relation => "Friend"> 

mam nadzieję, że jest to bardziej przydatne niż mój oryginalny odpowiedź. Daj mi znać, jeśli masz jakieś pytania. I na pewno spójrz na dokumentację ActiveRecord Associations, o której wspomniałem powyżej.

+0

Tak, patrzyłem na ten przykład i nie było to wspaniałe ze standaryzacji wyjaśniania; chociaż może to być jedyny, którego można użyć. – wrburgess

+0

Sądzę, że jestem nieco niejasny co do tego, jak strona ma działać. Być może na stronie Athlete # Show widok użytkownika ma coś, co może nacisnąć przycisk, aby wyświetlić formularz, który umożliwia przesłanie formularza z polem tekstowym, w którym dodawałby relację i dyktował stosunek do sportowiec w polu tekstowym? Przepraszam, że to najlepsze, co mogę zrobić bez dokładniejszego wyjaśnienia pożądanej funkcjonalności. – Batkins

+0

W skrócie, muszę zbudować formularz, w którym Użytkownik może stworzyć sportowca, a następnie wskazać, jaką rolę chce dla związku (trener, rodzic itp.). Formy Railsów wydają się proste w przypadku związku typu "wiele do jednego", ale nie ma wielu przykładów na to, jak budować widoki i kontrolery dla wielu-do-wielu (które znalazłem). Mogę robić to zbyt ciężko, ale wciąż próbuję wymyślić "szynowy sposób" robienia tego. Mogłem to zrobić w PHP podczas snu. – wrburgess

0

Spróbuj wyskakujących railscastów lub ascii. Tam zazwyczaj zaczynam. Nie wiem, czy to jest to, o co prosisz, ale istnieje samouczek dotyczący tych stron dla zagnieżdżonych formularzy. Myślę, że jest w złożonych formach. Czy warto to czytać/oglądać.

Powiązane problemy