0

我正在建立一个工作委员会,因此有两个用户模型以及雇主和申请人。我正在使用设计,因此我现在的挑战是将其与多态关系一起使用。

通过一些rails控制台测试,我知道设计中的(资源)传递了所有用户信息,并且传递了role_type,即申请人或雇主。但是它设置为 nil,因此虽然我的用户被保存,但它并没有保存申请人或雇主的角色类型。此外,仅在用户表中的申请人或雇主表中没有保存任何内容。我的代码在下面,但我的问题实际上是如何将 role_type 传递给设计资源哈希?或者,如果这不可能是解决这个问题的最优雅的方法。

非常感谢!

如果我错过了任何东西,完整的项目代码也在这里https://github.com/PatGW/jobs

下面是视图->设计->用户->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 的 UsersController

class 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
4

1 回答 1

0

这里的问题不是设计相关的,而是关联/OO相关的。我检查了您的代码:您的申请人和雇主模型似乎有一个用户字段,而这些模型实际上应该从用户继承,因为它们是一种用户。所以,试试这个:

class Employer < User
  attr_accessible :location, :logo, :name
end

对于初学者,看看它是否有帮助。(顺便说一句:显然,您还应该更改申请人的代码)

于 2013-04-14T14:09:59.917 回答