我有一个Developer
模型那个:has_one
User
模型。这允许跨不同用户类型的身份验证和内容。
当我使用不正确的用户数据创建新开发人员时,它会呈现验证错误列表。当我使用不正确的用户数据更新开发人员时,它只会重新呈现编辑表单(应该如此),但不会显示验证错误。
我的验证错误显示代码位于表单的部分字段中,因此不应该有所作为。
我觉得问题出在我尝试更新模型的方式上。
def update
@developer = Developer.find(params[:id])
if @developer.user.update_attributes(params[:user]) && @developer.update_attributes(params[:developer])
flash[:success] = "Profile Updated"
sign_in @developer.user
redirect_to @developer
else
render 'edit'
end
end
而且我的User
验证并不是什么花哨的东西:
validates :name, presence: true, length: {maximum: 30}
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates :email, presence: true,
format: { with: VALID_EMAIL_REGEX },
uniqueness: { case_sensitive: false }
validates :password, length: {minimum: 6}
validates :password_confirmation, presence: true
我已经阅读了至少 10 篇听起来相似的不同帖子,但我没有发现任何有用的东西。任何帮助都会很棒。
编辑
当我提交update
表单时,会出现以下参数
Parameters: {"utf8"=>"✓", "authenticity_token"=>"70xmNVxxES7lK2bSIIul/i5GaiJhB9+B5bV/bUVFlTs=", "user"=>{"name"=>"foo", "email"=>"foo@example.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "developer"=>{"skype_name"=>""}, "commit"=>"Save changes", "id"=>"11"}
它仍然不进行User
验证。如果我通过控制台执行以下操作,它虽然可以工作(即它在参数良好时保存,而在参数错误时失败):
Developer.last.update_attributes(:user_attributes => {:name => "test updated", :email => "test@example.com", :password => "123456", :password_confirmation => "123456"})
所以对我来说唯一不同的是我的表格给了我,:user_attributes
而不仅仅是:user
我的表格。我该如何改变呢?
编辑 2
我的_fields
部分表格的相关部分:
<%= render 'shared/error_messages' %>
<%= fields_for :user do |user| %>
<%= user.label :name %>
<%= user.text_field :name %>
<%= user.label :email %>
<%= user.text_field :email %>
<%= user.label :password %>
<%= user.password_field :password %>
<%= user.label :password_confirmation, "Confirm Password" %>
<%= user.password_field :password_confirmation %>
<% end %>
和我的Developer#edit
行动:
def edit
@developer = Developer.find(params[:id])
end