我有一个rails应用程序,在从该站点提交表单后,将验证错误消息发送到另一个站点。
我有很多我需要自定义的列但是现在我只是想让一个正常工作。我试图通过改变en.yml来实现它。
#config/locales/en.yml
en:
activerecord:
attributes:
message:
msg_from_name:
one: "Your Name"
正在Message模型上调用验证。
#app/models/message.rb
class Message < ActiveRecord::Base
validates :msg_from_name, length: { minimum: 3, maximum: 20 }
end
现在,当msg_from_name
被验证时,它返回:
&#34; msg_from_name太短(最少3个字符)&#34;
我想要得到的是:
&#34;你的名字太短(最少3个字符)&#34;
如何在验证期间更改rails发送到外部站点的属性名称?
更新了更改了仍无效的评论: Ref
#config/locales/en.yml
en:
activerecord:
attributes:
message:
msg_from_name: "Your Name"
当我尝试时:
#app/models/message.rb
class Message < ActiveRecord::Base
validates :msg_from_name, length: { minimum: 3, maximum: 20 }
HUMANIZED_ATTRIBUTES = {
:msg_from_name => "First Name"
}
#Rails 4
def self.human_attribute_name(attr, options = {})
HUMANIZED_ATTRIBUTES[attr.to_sym] || super
end
end
我再次获得相同的输出。我不确定我使用的语法是否仅适用于视图,或者视图所需的代码是否与作为ajax中的错误发送到外部站点的代码不同。
答案 0 :(得分:0)
虽然我不确定为什么我尝试将ajax发送回另一个网站但在本地视图中工作时没有工作,但我做了以下操作以解决我的问题。
外部网站上的客户端已经可以使用response.status
和response.statusText
捕获HTTP状态错误(400,402,500等)。我通过将它们推入散列errors[:codeErrors]
并构建一组失败的验证消息来发送验证错误。客户可以使用response.responseJSON.codeErrors
访问它们。示例代码:
//external sites clientform.js
...
$.ajax({
method: "POST",
url: '//example.com/page', //target url
data: $('#contact-form').serialize(),
dataType: "json",
success: function(response) {
// ...
},
error: function(response) {
console.log("Error: " + response.status + ", Message: " + response.statusText)
// Custom server errors
var msg = response.responseJSON.codeErrors;
console.log("There are " + msg.length + " validation errors:")
for(i = 0; i < msg.length; i++) console.log(msg[i]);
}
});
e.preventDefault();
...
所以我在将ajax响应发送到客户端之前替换了每个字符串中的文本:
# rails controller
...
errors[:codeErrors].each do |text|
text.sub! 'msg_from_site', 'Form Origin'
text.sub! 'msg_from_name', 'Your Name'
text.sub! 'msg_from_ipaddress', 'IP Error'
# ...etc
end
render status: statusCode, json: errors
...
我确定这不是最好的方式,但这是我开展工作的唯一方式。