我有两个模型:
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字段时验证用户模型。在未经检查的情况下,表格应该提交。什么是更好的解决方案。
答案 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