我有以下型号
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>
在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 %>
图中显示的问题是,当我只想说“密码太短”时,它会说“组织凭证密码太短”。我对rails非常陌生,我觉得我必须遍历错误哈希以吐出“密码太短”,但我不确定这是否是唯一的方法,或者是否有更方便。我希望有可能遇到同样问题的人可以告诉我他们是如何解决的。
谢谢!
答案 0 :(得分: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了解更多详情。
答案 1 :(得分: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 %>
答案 2 :(得分:0)
谢谢大家的回答。
我不知道Rails有点坚持,感谢Rich。
我实际上用Michal的回答指出了正确的方向。 似乎真正摆脱属性名称的唯一方法是 实际上,在configs / locales中的en.yml文件中自定义每个错误消息。
以下指南是帮助我解决此问题的非常有用的链接:
http://adamhooper.com/eng/articles/5
如果有人遇到同样的问题,请参阅adam hopper的文章。
导轨指南:http://guides.rubyonrails.org/i18n.html#pluralization有一些帮助,但没有第一个资源那么多。
干杯!