Hier ist meine aktuelle Situation:Wie verwenden Sie ein Formular von einem anderen Controller, um einen Wert festzulegen, der eine has_many: through-Beziehung in Rails4 hat?
Ich habe ein Modell :companies
und ein Modell :users
(Devise
). Ein Unternehmen kann viele moderierende Benutzer durch ein drittes Modell :moderator_connections
und umgekehrt haben. Um einen aktuellen Moderator auszuwählen, habe ich dem Modell :users
die Spalte current_company
(nicht referenziert) hinzugefügt.
Ich möchte eine dropdown_menu
unter meinem Hauptmenü auf der gesamten Website hinzufügen. Wenn Sie in diesem Menü eine aktuelle Firma auswählen, kann der Benutzer zum Inhalt dieser Firma wechseln. Ich habe versucht, dies zu tun, indem ich ein Formular-teilweise über dem <%= yield %>
in meinem application.html.erb
rendere. Die form
versucht, den current_company
integer zu bearbeiten (indem sie sie an die company_id
von einem der angeschlossenen Unternehmen zu verändern) für die current_user
, aber ich glaube, ich bin nicht einmal in der Nähe, es zu lösen :(
Hier sind meine Beziehungen.
/models/company.rb:
has_many :moderator_connections
has_many :moderators, through: :moderator_connections, class_name: 'User', foreign_key: 'company_id'
/models/user.rb:
has_many :moderator_connections
has_many :moderated_companies, through: :moderator_connections, class_name: 'Company', foreign_key: 'user_id'
/Modelle/mod erator_connection.rb:
belongs_to :user
belongs_to :company
/layouts/application.html.erb:
<main>
<div class="container">
<%= render partial: "users/current_company_form" %>
<%= render partial: "shared/message" %>
<%= yield %>
</div>
</main>
/users/_current_company_form.html.erb:
<% if user_signed_in? %>
<%= form_for edit_user_registration_path do |f| %>
<div class="form-group">
<%= f.collection_select :current_company, current_user.moderator_connections(:company_id), :name, :id,{ prompt: "Choose a company" } %>
<%= f.hidden_field :current_company, :value => current_user.moderator_connections(:company_id) %>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
Es geht schon los mit Beim Rendern des Partials erhalte ich den folgenden Fehler (abhängig von der Seite, in der ich mich befinde): No route matches [POST] "/pages/welcome"
Um ehrlich zu sein, ich habe keine Ahnung, wie man das schafft (wie Sie aus meinen törichten Versuchen schließen können). Kann mir jemand helfen?
Lieber @oreoluwa, vielen Dank für Ihre Antwort. Ich erhalte einen neuen Fehler: 'Die Quellenassoziation (en)" moderated_company "oder: moderated_companies konnte im Model ModeratorConnection nicht gefunden werden. Probieren Sie 'has_many: moderated_companies,: through =>: moderator_connections,: source =>'. Ist es eine von Benutzer oder Firma? ' Es scheint, als ob meine Assoziationen noch nicht richtig ausgerichtet sind. Irgendwelche Ideen, wie man die richtigen Assoziationen hinzufügt? –
aktualisiert meine Antwort, hoffe, dass funktioniert – oreoluwa
Ja, viel besser! Immer noch ein Fehler ('No route matches [PATCH]"/users/edit "'). Muss ich manuell eine Patch-Route zu meinen Routen hinzufügen? –