【发布时间】:2016-06-02 00:43:50
【问题描述】:
我有一个 Rails 应用程序,为用户使用设计。我有两种类型的用户,它们共享一些字段,然后拥有自己的字段。我为这两种类型制作了多态模型。当我向基本设计用户添加字段时,添加新用户的表单似乎无法识别新字段。
设计用户
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
belongs_to :meta, polymorphic: true
end
多态艺术家模型
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
覆盖设计注册
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
路线
Rails.application.routes.draw do
...
resources :artists
resources :teachers
devise_for :users, :controllers => { registrations: 'registrations' }
...
end
然后,在新页面中为艺术家使用的以下 _form 上,默认情况下适用于设计中的电子邮件和密码字段。我添加到用户表错误的 :first_name 字段的下一个 user_fields.label (undefined local variable or method `user_fields' for # 你的意思是? number_field)
views/artist/_form.html.erb(在新视图中呈现)
<%= 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 %>
【问题讨论】:
标签: ruby-on-rails-4 devise polymorphism