我有一个像这样的用户模型 -
class User < ActveRecord::Base
belongs_to :user_group
validates :email, :user_group, presence: true
end
使用像这样的en.yml -
activerecord:
errors:
models:
user:
attributes:
email:
blank: Enter an email address.
user_group:
blank: Please choose a user group.
Rails可以使用电子邮件属性的状态验证错误消息,但同样不适用于 user_group 属性。为什么这样?
更新
我之前应该提到 - 我知道验证user_group_id
而不是user_group
的存在会以这种方式工作,但这并不是那么强大。
我的表格 -
<%= simple_form_for @user do |user_form| %>
<%= user_form.association :user_group, collection: UserGroup.all, prompt: "Choose a User Group" %>
<% end %>
答案 0 :(得分:2)
users表上的数据库列是user_group_id但是因为 belongs_to关联,user_group也是一个属性吗?
不,您应该在user_group_id
属性上进行验证。user_group
只是model name
而不是attribute
。
将您的user model
和en.yml
更改为
#user.rb
class User < ActveRecord::Base
belongs_to :user_group
validates :email, :user_group_id, presence: true
end
#en.yml
activerecord:
errors:
models:
user:
attributes:
email:
blank: Enter an email address.
user_group_id:
blank: Please choose a user group
这应该有用。
答案 1 :(得分:2)
可以通过“ required”键来翻译对longate_to关系/关联的自动验证(在5.x中引入):
activerecord:
errors:
models:
user:
attributes:
user_group:
required: "Please choose a user group."
不需要进一步的显式验证(这将另外触发“空白”键)
答案 2 :(得分:1)
我通过Rails和i18n gem的源代码进行了调试,最后发现问题出现在我的en.yml文件中 -
activerecord:
errors:
models:
user:
attributes:
email:
blank: Enter an email address.
user_group:
blank: Please choose a user group.
......
......
......
......
user_group:
illegal_name: No special characters allowed
正如您所看到的,有两个user_group
键(抱歉,我之前没有粘贴整个en.yml文件)。所以我将翻译改为
activerecord:
errors:
models:
user:
attributes:
email:
blank: Enter an email address.
user_group:
blank: Please choose a user group
illegal_name: No special characters allowed
现在这个 -
class User < ActveRecord::Base
belongs_to :user_group
validates :email, :user_group, presence: true
end
显示翻译文件中给出的错误消息。