我正在建立一个工作委员会,因此有两个用户模型,雇主和申请人。 我正在使用设计,因此我现在的挑战是使用多态关系。
通过一些rails控制台测试,我知道设计中的(资源)传递了所有用户信息,并且它正在传递role_type,即申请人或雇主。但是它设置为nil,因此虽然我的用户正在保存但它并没有保存申请人或雇主的角色类型。此外,仅在用户表中的申请人或雇主表中没有保存任何内容。我的代码如下,但我的问题是如何将role_type传递给设计资源哈希?或者,如果这不是解决这个问题的最优雅方式。
非常感谢!
如果我错过了https://github.com/PatGW/jobs
,那么完整的项目代码就在这里以下是views-> devise-> user-> new.html.erb
<h1>Sign Up</h1>
<%= form_for @user do |f| %>
<% if @user.errors.any? %>
<div class="error_messages">
<h2> Form is invalid</h2>
<ul>
<% for message in @user.errors.full_messages %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<p>
<%= f.label :email %><br />
<%= f.text_field :email %>
</p>
<p>
<%= f.label :password %><br />
<%= f.password_field :password %>
</p>
<p>
<%= f.label :password_confirmation %><br />
<%= f.password_field :password_confirmation %>
</p>
<p>
<%= radio_button_tag :role_type, "employer", :checked => false %><br />
<%= label :role_type, 'Employer' %>
</p>
<p>
<%= radio_button_tag :role_type, "applicant", :checked => true %><br />
<%= label :role_type, 'Applicant' %>
</p>
<p class="button"><%= f.submit %></p>
<% end %>
继承自DeviseController
的UsersControllerclass UsersController < Devise::RegistrationsController
def new
super
end
def create
User.transaction do
super
after_sign_in_path(resource)
end
end
private
def after_sign_in_path(resource)
debugger
@user = User.new(params[:user])
if params[:role_type] == "coach"
role = Employer.create
else params[:role_type] == "player"
role = Applicant.create
end
end
end
答案 0 :(得分:0)
这里的问题不是设计相关,而是关联/ OO相关。我检查了你的代码:你的申请人和雇主模型似乎有一个用户字段,而这些模型实际上应该继承用户,因为他们是一种用户。所以,试试这个:
class Employer < User
attr_accessible :location, :logo, :name
end
首发,看看是否有帮助。 (顺便说一句:显然,你也应该改变申请人的代码)