Ich verwende einfache Form und Devise.Wie erstelle ich einen neuen Datensatz in einer Assoziation in einem von Devise verwalteten Modell mit Simple Form?
Auf meinem registrations/edit.html.erb
, ich habe folgendes:
<%= simple_form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put, class: "edit-user-form m-t" }) do |f| %>
<%= f.file_field :avatar, class: 'col-lg-4 form-control' %>
<%= f.input_field :email, required: true, autofocus: true %>
<%= f.input_field :current_password, hint: "we need your current password to confirm your changes", placeholder: "current password", required: true %>
<h3 class="text-center">Change Password</h3>
<%= f.input_field :password, autocomplete: "off", hint: "leave it blank if you don't want to change it", placeholder: "new password", required: false %>
<%= f.input_field :password_confirmation, placeholder: "confirm new password", required: false %>
<h3 class="text-center">School</h3>
<%= f.association :school, collection: School.where(school_type: [:college, :university]), prompt: "Choose a school", class: 'col-lg-4 form-control', label: false %>
<div class="alert alert-warning col-lg-offset-1 col-lg-10 text-center">
<p>NB: If you can't find your school in the list above, please add it in the field below.</p>
<%#= f.input_field some_random_field_that_collects_this_school_name %>
</div>
<%= f.button :submit, "Update", class: "btn btn-lg edit-account-update-button" %>
<% end %>
Was ich tun möchte, ist, wenn die Schule für den Benutzer derzeit nicht in unsere DB, ich möchte, dass sie den Namen ihrer Schule unterbreiten.
Dies ist das DB-Schema für School.rb
:
# == Schema Information
#
# Table name: schools
#
# id :integer not null, primary key
# name :string
# school_type :integer
# created_at :datetime not null
# updated_at :datetime not null
Wo school_type
ist ein ENUM-Wert:
enum school_type: { high_school: 0, college: 1, university: 2 }
Was ist der beste Weg, dies zu erreichen?
Sie könnten 'reject_if verwenden möchten: existing_school' mit' accepts_nested_attributes_for' so dass keine doppelten Schulen versehentlich erstellt werden. (Sie müssen natürlich Ihre eigene 'existing_school' Methode schreiben) – EJ2015
@ EJ2015 Guter Anruf! Bearbeitet um hinzuzufügen. – anyarms
Da ich Devise verwende, kann ich das einfach in meinem 'registrations_controller # edit' anstatt in meinem' users_controller # edit' tun? Ich habe eigentlich keinen 'user_controller', aber ich habe einen' RegistrationsController'. Deshalb frage ich. – marcamillion