2015-07-10 93 views
0

我有一个嵌套的表单对象“所有者”,它与帐户一起创建一个用户。在account.rb:Rails:自定义嵌套表单域上的验证错误消息

belongs_to :owner, class_name: "User" 
has_many :users 
accepts_nested_attributes_for :owner 

然后在我的创建一个帐户的形式,我有我的帐户字段,然后fields_for所有者。这工作都很好,很棒,并与所有者一起创建一个帐户,但是我想用验证错误消息来增强用户体验。眼下,会回来为:

  • (帐户属性)不能为空
  • (其他帐户属性)不能为空

哪些是罚款和正常的,但那么这些是什么conern我:

  • 用户无效
  • 所有者密码不能为空
  • 所有者密码太短(至少是6个字符)
  • 所有者的名字不能为空

等等等等所有我的验证的。

首先,我只想让它说“密码不能为空”,“名字不能为空”。基本上我不希望用户看到任何与“所有者”有关的事情。他们没有在形式上看到它......在前端没有东西说所有者,所以用户体验对于所有者来说并不理想。它只是一个后端的命名约定,我不希望用户考虑。称我为完美主义者,但是否有可能从消息中移除嵌套对象并使其表现得好像它们都是同一模型的一部分?

此外,“用户无效”给出了什么?

回答

0

我的验证错误包括这段代码,我呈现为局部贯穿我的应用程序:

<% if validation_errors.errors.any? %> 
    <div class="alert alert-danger alert-dismissable"> 
    <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button> 
    <i class="icon-notice"></i> 
    <b>Please correct the following errors:</b> 
    <ul> 
     <% validation_errors.errors.full_messages.each do |msg| %> 
     <li><%= msg %></li> 
     <% end %> 
    </ul> 
    </div> 
<% end %> 

我不得不修改以此为这种特殊情况如下:所以

<% if @account.errors.any? %> 
    <div class="alert alert-danger alert-dismissable"> 
    <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button> 
    <i class="icon-notice"></i> 
    <b>Please correct the following errors:</b> 
    <ul> 
     <% @account.errors.delete(:users) %> 
     <% @account.errors.each do |field, msg| %> 
     <li><%= field.to_s.sub('owner.', '').humanize.capitalize %> <%= msg %></li> 
     <% end %> 
    </ul> 
    </div> 
<% end %> 

你可以看到这里的不同:而不是errors.full_messages,我分别使用errors.field和errors.msg,以便我可以操纵该字段。我从字符串中删除了所有者,并使其人性化并大写,并且仅仅删除了用户的情况是无效的。这给了我一个很好的格式化,更好的用户体验,我想。

希望这可以帮助别人。干杯。