2014-07-27 20 views
-1

我有以下模型嵌套属性形成错误消息定制

class OrgPerson < ActiveRecord::Base 
    has_and_belongs_to_many :TypRole 
    has_and_belongs_to_many :OrgContact 
    has_one :OrgCredential, dependent: :destroy 
    belongs_to :OrgCompany, foreign_key:"org_company_id" 
    belongs_to :TypPosition, foreign_key:"typ_position_id" 
    validates :first_name, presence: true 
    validates :last_name, presence: true 
    accepts_nested_attributes_for :OrgCredential 
end 

class OrgCredential < ActiveRecord::Base 
    belongs_to :OrgPerson, foreign_key:"org_person_id" 
    validates :user_name, presence: true 
    validates :password, length: { minimum: 6 } 
    before_create :create_remember_token 
    has_secure_password 
end 

和下面的强参数:

def person_params 
    params.require(:org_person).permit(:first_name, :last_name, 
    org_credential_attributes: [:password, :password_confirmation]) 

end 

和以下new.html.erb

<%= form_for(@person) do |f| %> 
    <%= render 'shared/error_messages' %> 
    <div class="col-md-12 "> 
     <%= f.text_field :first_name, placeholder: "First Name", :class => "form-control" %> 
     <%= f.text_field :last_name, placeholder: "Last Name", :class => "form-control" %> 
     <%= f.fields_for :org_credentials do |oc|%> 
      <%= oc.password_field :password, placeholder: "Password", :class => "form-control" %> 
      <%= oc.password_field :password_confirmation, placeholder: "Password Confirmation", :class => "form-control" %> 
     <% end %> 
    <%= f.submit "Create my account", class: "btn btn-large btn-primary" %> 
    </div> 

In shared/error_messages

<% if @person.errors.any? %> 
    <div id="error_explanation" class="col-md-12"> 
     <div class="alert alert-danger" role="alert"> 
     The form contains <%= pluralize(@person.errors.count, "error") %>. 
     </div> 
     <ul> 
     <% @person.errors.full_messages.each do |msg| %> 
     <li>* <%= msg %></li> 
     <% end %> 
     </ul> 
    </div> 
<% end %> 

enter image description here

如图片显示的问题是,它类似于“组织证书密码太短”的时候,我只希望它说:“密码是太短了。”我对Rails很陌生,我觉得我不得不通过错误散列遍历“Password is too short”,但我不太确定这是否是唯一的方法,或者是否存在更简单的方法我希望有人遇到同样的问题,可以启发我解决问题的方法。

谢谢!

+0

您可能想看看Rails i18n(这是Rails指南的一部分) –

回答

1

协会

首先,你需要知道的Rails需要snake_case该协会名称的定义 - 和CamelCase的类名:

#app/models/org_person.rb 
Class OrgPerson < ActiveRecord::Base 
    has_and_belongs_to_many :typ_roles 
    has_and_belongs_to_many :org_contacts 

    has_one :org_credential, dependent: :destroy 
    belongs_to :org_company 
    belongs_to :typ_position 

    validates :first_name, presence: true 
    validates :last_name, presence: true 
    accepts_nested_attributes_for :org_credential 
end 

-

消息

在问候你的错误消息,并且Rahul Singh建议,你需要考虑的是,你可以定义custom error messages for your validations

你可以做,使用下列内容:

validates :first_name, :last_name, 
     presence: { message: "You Need To Enter A Name!" } 

这会给自定义消息你,但是,有 Rails的一个难点,因为很难获得要定制的属性名称。

如果你想只显示邮件,你会用最好的是这样的(实时编码)是:

<% @person.errors.each do |attr,msg| %> 
    <li><%= msg %></li> 
<% end %> 
1

您可以在模型中添加自定义验证错误消息。

class OrgCredential < ActiveRecord::Base 
    belongs_to :OrgPerson, foreign_key:"org_person_id" 
    validates :user_name, presence: true 
    validates :password, length: { minimum: 6 }, message: "Password is too short" 
    before_create :create_remember_token 
    has_secure_password 
end 

通过这里阅读Active Record Validations了解更多详情。

0

谢谢大家对你的答案。

我不知道Rails有一个棘手的问题,谢谢Rich。

我实际上使用了Michal的回应来指出我的正确方向。 似乎实际摆脱属性名称的唯一方法是 实际上会自定义configs/locales中en.yml文件中的每条错误消息。

下面的指南是一个非常有用的链接,帮助我解决这个问题:

http://adamhooper.com/eng/articles/5

如果有人运行到同样的问题,请参见亚当料斗的文章。

导轨指南:http://guides.rubyonrails.org/i18n.html#pluralization有一些帮助,但不如第一资源。

干杯!

+0

您是否需要更改代码?我得到'未初始化的常量ActiveRecord :: Errors(NameError)' – user4584963