我有两个模型:Person
和User
. 一个人可以有一个用户或根本没有用户,但每个用户都必须属于一个人。
我已经像这样设置了两个模型:
人(具有 has_user 属性):
has_one :user, dependent: :destroy
accepts_nested_attributes_for :user
用户(具有 person_id 属性):
belongs_to :person
validates_presence_of :login, :password
validates_uniqueness_of :login
在 Person 表单中,我有一个嵌套的 form_for ,只有当我选中一个复选框,该复选框还在 Person 的表单部分上将 has_user 属性设置为 true 时,它才会显示。
我的问题是,每当我提交一个没有用户的人时,它仍然会尝试验证用户。我怎样才能让它工作?
更新:
在我看来:
<div class="form-group">
<%= person_form.label :has_user, :class => 'inline-checkbox' do %>
Possui usuário
<%= person_form.check_box :has_user, {id: "hasUser", checked: @person.has_user} %>
<% end %>
</div>
</div>
<div id="userPart" class="findMe"
<% if @person.user.id.blank? %> style="display:none;"
<% end %>>
<h2> User: </h2>
<div class="container">
<%= person_form.fields_for :user do |user_form| %>
<%= render partial: 'users/campos_user', locals: {form: user_form} %>
<% end %>
</div>
</div>
在我的 Person.js 中:
jQuery ->
$(document).ready ->
$(document).on 'turbolinks:load', #Added line
console.log("Turbolinks ready.")
$("#hasUser").change ->
$("#userPart").toggle();
return
return
return
return
在我的个人控制器中:
def new
@person= Contato.new
@person.ativo = true
@page_title = 'Novo person'
@person.build_user
end
def create
@person = Person.new(person_params)
respond_to do |format|
if @person.save
flash[:notice] = 'Contato foi criado com sucesso.'
if @person.has_user == true
format.html {redirect_to controller: :users, action: :new, person_id: @person.id}
else
format.html {redirect_to @person}
end
format.json {render :show, status: :created, location: @person}
else
flash[:warn] = "Erro ao criar contato."
format.html {render :new}
format.json {render json: @person.errors, status: :unprocessable_entity}
end
end
end
人物参数:
def person_params
params.require(:person).permit(:id, :company_id,
:active, :name,
:cargo, :celular,
:email, :nascimento,
:observacoes, :mensagem_instantanea,
:tipo_msg_inst, :possui_usuario,
user_attributes: [:login, :password, :permits, :id, :person_id, :_destroy])
end