has_one关系的Rails验证

时间:2013-05-17 10:40:25

标签: ruby-on-rails ruby-on-rails-3 validation mongoid associations

我有两个模型:

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 %>

我想在检查check_box:login字段时验证用户模型。在未经检查的情况下,表格应该提交。什么是更好的解决方案。

3 个答案:

答案 0 :(得分:0)

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

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

validates_presence_of :username, :if => login?

您怎么看?

答案 1 :(得分:0)

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

或委托+验证状态可能也有效

  

委托:用户名,到:: user,allow_nil:true

     

验证:username,presence:true,if :: login

答案 2 :(得分: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