Mam zadania i użytkowników. Gdy użytkownik wykona zadanie, utworzę Completion z polem, w którym użytkownik będzie mógł określić, ile czasu spędził. Potrzebuję formularza, który pokazuje wszystkie zadania ze statusem ukończenia i atrybutem time_spent. Po przesłaniu uzupełnienia, które istniały, powinny zostać zaktualizowane, a nowe powinny zostać utworzone. Chciałbym zrobić to w Formtastic, jeśli to możliwe, ale będę zadowolony z podstawowego rozwiązania Rails 3.Jak wyświetlić formularz dla podzestawu powiązanych rekordów, z których niektóre jeszcze nie istnieją?
class Completion < ActiveRecord::Base
belongs_to :task
belongs_to :user
# attribute time_spent
end
class User < ActiveRecord::Base
has_many :completions
has_many :tasks, :through => :completions
end
class Task < ActiveRecord::Base
belongs_to :milestone
has_many :completions
has_many :users, :through => :completions
end
Dodatkowym aspektem jest to, że chcę pokazać tylko pewien zestaw zadań, takich jak te należące do Kamienia milowego. Czy powinienem mieć formularz kontrolera Milestone, który wysyła posty do kontrolera Completions?
class Milestone < ActiveRecord::Base
has_many :tasks
has_many :completions, :through => :tasks
end
UPDATE szukałem przez kilka dni teraz i znalazłem manydeadends. To jest blisko, ale wymaga to, że wszystkie obiekty łączące już istnieją.
To, co wyróżnia to pytanie, to że niektóre z linków jeszcze nie istnieją i nie ma jednego modelu dla linków do zagnieżdżenia. W przypadku Ryana Daigle'a Nested Object Forms post) wykonałem tę pracę w formie umożliwiającej edycję wszystkich możliwych uzupełnień dla użytkownika, ale muszę edytować podzbiór możliwych uzupełnień w jednym formularzu. Czy muszę wykonać redundantny obiekt MilestoneCompletions, który zawiera has_many
Completions i belongs_to
Użytkownik? Czy można ActiveModel has_many
?
Właśnie usunąłem moją odpowiedź, aby twoje pytanie było bardziej widoczne, edytuj swoje pytanie z danymi, które mi dałeś :) – apneadiving
To bardzo przemyślane! Musiałem ominąć ten problem, więc w końcu zrezygnowałem i pracowałem nad tym. Opublikuję moją odpowiedź dla wszystkich zainteresowanych. – Turadg