我有一个模型,User
,然后是其他2个模型:Editor
和Administrator
通过多态关联与用户模型相关联,所以我希望有2种类型的用户,它们会有不同的字段,但我需要它们来共享某些功能(比如在两者之间发送消息)。
因此,我需要将用户ID保存在一个表users
中,以及其他表中的其他数据,但我希望当用户注册时,他们首先创建帐户,然后根据他们选择的档案类型。
模型/ user.rb
class User < ActiveRecord::Base
belongs_to :profilable, :polymorphic => true
end
模型/ administrator.rb
class Administrator < ActiveRecord::Base
has_one :user, :as => :profilable
end
模型/ Editor.rb
class Editor < ActiveRecord::Base
attr_accessor :iduser
has_one :user, :as => :profilable
end
控制器/ user.rb
def create
@user = User.new(params[:user])
respond_to do |format|
if @user.save
if params[:tipo] == "editor"
format.html {redirect_to new_editor_path(:iduser => @user.id)}
else
format.html { redirect_to new_administrator_path(@user) }
end
# format.json { render json: @user, status: :created, location: @user }
else
format.html { render action: "new" }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
控制器/ editor.rb
def new
@editor = Editor.new
@editor.iduser = params[:iduser]
respond_to do |format|
format.html # new.html.erb
format.json { render json: @editor }
end
end
def create
id = params[:iduser]
@user = User.find(id)
@editor = Editor.new(params[:editor])
@editor.user = @user
respond_to do |format|
if @editor.save
format.html { redirect_to @editor, notice: 'Editor was successfully created.' }
format.json { render json: @editor, status: :created, location: @editor }
else
format.html { render action: "new" }
format.json { render json: @editor.errors, status: :unprocessable_entity }
end
end
end
视图/编辑/ _form.html.erb
<div class="field">
<%= f.label :bio %><br />
<%= f.text_area :bio %>
<%= f.hidden_field :iduser%>
</div>
的routes.rb
Orbit::Application.routes.draw do
resources :administrators
resources :editors
resources :users
当有人创建新用户时,他们必须使用单选按钮拍摄“编辑器”或“管理员”,然后使用该参数,代码将创建编辑器或管理员配置文件。
我不确定我是否拥有正确的关联,因为它应该是“用户有个人资料(编辑/管理员)”,但在这种情况下是“个人资料(管理员/编辑)有用户”。
问题:
我现在拥有它的方式不起作用,正如我所说,这种关联似乎并不合适。
感谢您的时间
答案 0 :(得分:0)
尝试并交换关联, 用户将拥有管理员配置文件,管理员配置文件将属于用户。
Administrator(:user_id, :other_attributes)
Editor(:user_id, :other_attributes)
那样,
class Administrator < ActiveRecord::Base
belongs_to :user
end
class Editor < ActiveRecord::Base
belongs_to :user
end
class User < ActiveRecord::Base
has_one :administrator
has_one :editor
end