3

我有两个模型,例如:

class Employee
  field :name
  field :login, type: Boolean
  has_one :user
end

class User
  field :username
  field :email
  belongs_to :employee
  validates_presence_of :username
end

如果选中登录字段的复选框,我想在创建员工时创建一个用户帐户。为此,我对员工控制器的新操作是:

def index
    @employee = Employee.new
    @employee.build_user
end

为此,我的表单代码是:

<%= simple_form_for(@employee) %>
<%= f.input :login, :as => :boolean, :label => "Create User" %>
<div class="create-user" style="display: none">
  <%= f.simple_fields_for :user do |u| %>
    <%= render 'user_fields', {f: u} %> 
  <% end %>
</div>
    <button class="btn btn-info">Save Change</button>
 <% end %>

_user_fields.html.erb 是:

<%= f.input :username %>

我想在选中 :login 字段的复选框时验证用户模型。在未选中的情况下,应提交表单。什么是更好的解决方案。

4

3 回答 3

0

也许您可以将您的用户验证转移到雇主模型中?

下面的代码应该可以解决您的问题

validates_presence_of :username, :if => login?

你怎么看?

于 2013-05-17T10:58:40.840 回答
0

也许使用 validates_associated: http: //guides.rubyonrails.org/active_record_validations_callbacks.html#validates_associated

或委托+验证存在也可能有效

委托:用户名,到::用户,allow_nil:真

验证:用户名,存在:真,如果::登录

于 2013-05-17T14:28:27.527 回答
0

最后我得到了它的解决方案:

class Employee
  field :name
  field :login, type: Boolean
  has_one :user
  has_one :user, :class_name => "User", :dependent => :destroy
  accepts_nested_attributes_for :user, :reject_if => :login_blank
  def login_blank
    return false if self.login == true
    return true if self.login == false
  end
end
于 2013-05-30T11:03:56.117 回答