Jestem początkujący w szynach i mam problem ze znalezieniem właściwego wyjścia z moim problemem.Double ma wiele atrybutów
mam trzy modele: rozmowa, uczestnika wiadomości, które mają następujące atrybuty:
Rozmowa:
module Messenger
class Conversation <ActiveRecord::Base
has_many :participants, :class_name => 'Messenger::Participant'
def messages
self.participants.messages.order(:created_at)
end
end
end
Uczestnik:
module Messenger
class Participant <ActiveRecord::Base
has_many :messages, :class_name => 'Messenger::Message'
belongs_to :conversation, :class_name => 'Messenger::Conversation'
end
end
Wiadomość:
module Messenger
class Message <ActiveRecord::Base
default_scope {order(:created_at)}
default_scope {where(deleted: false)}
belongs_to :participant, :class_name => 'Messenger::Participant'
end
end
Mój problem polega na tym, że próbuję utworzyć jedną formę, aby utworzyć rozmowę z pierwszą wiadomością. Formularz wygląda następująco:
= form_for @conversation, url: messenger.conversations_create_path do |f|
.row
.col-md-12.no-padding
.whitebg.padding15
.form-group.user-info-block.required
= f.label :title, t('trad'), class: 'control-label'
= f.text_field :title, class: 'form-control'
.form-group.user-info-block.required
= f.label :model, t('trad'), class: 'control-label'
= f.text_field :model, class: 'form-control'
.form-group.user-info-block.required
= f.label :model_id, t('trad'), class: 'control-label'
= f.text_field :model_id, class: 'form-control'
= fields_for @message, @conversation.participants.message do |m|
= m.label :content, t('trad'), class: 'control-label'
= m.text_area :content, class:'form-control'
.user-info-block.action-buttons
= f.submit t('trad'), :class => 'btn btn-primary pull-right'
Próbowałem wielu sposobów, aby ta forma prosta, ale ja napotkał pewne problemy, które nie wiem jak to naprawić za pomocą szyny poprawnie.
Próbowałem użyć Field_for
, aby dołączyć wiadomość do mojego formularza rozmowy, ale ponieważ nie mam nic zapisanego w mojej bazie danych, wydaje mi się, że nie mogę połączyć wiadomości z nieistniejącym uczestnikiem.
W zasadzie chcę, aby moja pierwsza forma, po sprawdzeniu poprawności, utworzyła rozmowę, powiązała bieżącego użytkownika z tą konwersacją i powiązała wiadomość z tym pierwszym użytkownikiem, ale zakładam, że istnieją sposoby na zrobienie tego za pomocą frameworka i nie chciałbym zrobić tego ręcznie.
Jaki jest właściwy sposób na osiągnięcie tego celu? Czy jestem na dobrej drodze, czy mogę coś zmienić lub coś dodać?
Edytuj: aby uczynić go bardziej zrozumiałym, uczestnik otrzymał identyfikator użytkownika i identyfikator_wiadomości, co oznacza, że jest to tabela relacji. Nie mogę dostosować atrybutów moich modeli, aby było to łatwiejsze, ponieważ muszę je zachować w ten sposób ze względów bezpieczeństwa.
można zajrzeć do has_many za pośrednictwem stowarzyszenia wiadomości w rozmowie zamiast Twoja ręcznie zwijana metoda. – engineerDave