Ich habe eine Rails-App, mit Devise für Benutzer. Ich habe 2 Arten von Benutzern, die einige Felder teilen und dann ihre eigenen haben. Ich machte polymorphe Modelle für die 2 Arten. Wenn ich dem Benutzer des Basisgeräts Felder hinzufügte, scheint das Formular zum Hinzufügen eines neuen Benutzers die neuen Felder nicht zu erkennen.Felder zu polymorphe Devise Benutzerschienen hinzufügen 4
devise Benutzer
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
belongs_to :meta, polymorphic: true
end
polymorphen Künstler Modell
class Artist < ActiveRecord::Base
has_one :user, as: :meta, dependent: :destroy
has_and_belongs_to_many :artist_expertises
accepts_nested_attributes_for :user
has_many :connections
has_many :teachers, through: :connections
end
Überschreiben ersinnen Registrierungen
class RegistrationsController < Devise::RegistrationsController
private
def sign_up_params
params.require(:user).permit(:first_name, :last_name, :email, :password, :password_confirmation)
end
def account_update_params
params.require(:user).permit(:first_name, :last_name, :email, :password, :password_confirmation, :current_password)
end
end
Routen
Rails.application.routes.draw do
...
resources :artists
resources :teachers
devise_for :users, :controllers => { registrations: 'registrations' }
...
end
Dann am folgenden _form, die für einen Künstler in der neuen Seite verwendet wird, ist in Ordnung für die E-Mail und Passwort Felder aus devise standardmäßig. der nächste user_fields.label für: first_name Feld, das ich (für # < # undefined lokale Variable oder Methode `user_fields'?: 0x007f9c81b3a108> Meinen Sie number_field) an den Benutzer-Tabelle Fehler mit zusätzlichen
views/Künstler /_form.html.erb (in der neuen Ansicht gerendert)
<%= form_for(setup_artist(@artist)) do |f| %>
<% if @artist.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@artist.errors.count, "error") %> prohibited this artist from being saved:</h2>
<ul>
<% @artist.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<%= f.fields_for :user do |user_fields| %>
<div class="field">
<%= user_fields.label :email %>
<%= user_fields.text_field :email %>
</div>
<div class="field">
<%= user_fields.label :password %>
<%= user_fields.text_field :password %>
</div>
<% end %>
<div class="field">
<%= user_fields.label :first_name %><br />
<%= user_fields.text_field :first_name %>
</div>
<div class="field">
<%= user_fields.label :last_name %><br />
<%= user_fields.text_field :last_name %>
</div>
<div class="field">
<%= f.label :inspiration %><br>
<%= f.text_area :inspiration %>
</div>
<div class="field">
<%= f.label "Area of Expertise" %><br />
<%= f.collection_check_boxes :artist_expertise_ids, ArtistExpertise.all, :id, :name do |b| %>
<div class="collection-check-box">
<%= b.check_box %>
<%= b.label %>
</div>
<% end %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>