使用Rails多态关联形成用户注册

我在使用多态关联进行用户注册时遇到了问题。 我想从多个多态关联模型中显示字段,但我不能。

模型类:

class User  true end class Advisor  :userable attr_accessible :extra accepts_nested_attributes_for :user # Idon't know if it is ok end class AnotherKingOfUser < ActiveRecord::Base #the same.. end 

我想为每个特定的用户类型创建一个控制器,所以:

 class AdvisorsController < ApplicationController # GET /advisors/new # GET /advisors/new.json def new # Here is where I'm not sure about what I did. I tried all variants buy any works for me. @advisor = Advisor.new @advisor.build_user respond_to do |format| format.html # new.html.erb format.json { render json: @advisor } end end end 

我的观点是:

   

prohibited this advisor from being saved:




所以在我的浏览器中只出现“生物”字段,但不会出现用户模型(Devise)的扩展字段。

 class Advisor < ActiveRecord::Base has_one :user, :as => :userable attr_accessible :extra, :user_attributes accepts_nested_attributes_for :user # its ok end class AdvisorsController < ApplicationController def new @advisor = Advisor.new # @advisor.build_user # unnecessary respond_to do |format| format.html # new.html.erb format.json { render json: @advisor } end end end # view <%= form_for(@advisor) do |f| %> <%= f.fields_for :user_attributes, @advisor.user||User.new do |ff| %> 
<%= ff.label :email %>
<%= ff.text_field :email %>
<%= ff.label :password %>
<%= ff.text_field :password %>
<% end %> ... <% end %>

当您使用类似的forms处理关联时(通常在您的情况下使用accepts_nested_attributes_for ),您需要创建对象以便在表单上显示它们。

这意味着,在这里,当rails构建你的表单时,它会查找@advisor.user的内容,这是空的,因为我想在你的控制器中你做了类似的事情

 @advisor = Advisor.new 

因此,如果您希望显示用户的字段,则需要build用户

 @advisor = Advisor.new @advisor.build_user # this will create a instance of User, but will not persist it 

使用该rails将在构建表单时找到用户,然后显示所需的字段。

我希望能回答你的问题。