首先,我是Rails的新手,所以我很抱歉,如果这个问题有明显的答案 - 我花了几个小时搜索,还没有找到一个,但也许我只是不知道如何用它表示谷歌。
这是:我有一个现有的Rails(2.3.5)应用程序与通常的HTML界面。我被要求使用此应用程序的一个子集,并将其用作API。我磕磕绊绊的地方是尝试提供备用模型验证错误消息。当人类用户尝试注册新帐户并且他的用户名太短时,验证消息应为“请输入有效的用户名”,例如,当有人尝试通过API注册新帐户时,相同的问题应触发消息“USERNAME_TOO_SHORT”。
理想情况下,我想扩展验证框架,以便我可以在我的用户模型中执行类似的操作:
validates_length_of :user_name, :minimum => 6,
:message => 'Please enter a valid username',
:api_message => 'USERNAME_TOO_SHORT',
...然后选择在视图或控制器中使用API的api_message。
我考虑过的其他事情包括:
在Rails中有没有比我上面概述的更好的方法?如果没有,是否有人就是否/如何实现我概述的路径有任何建议?
答案 0 :(得分:0)
这可以通过利用“respond_to”块
来实现respond_to do |format|
format.html {
... the response for HTML (i.e. browser clients) ...
}
format.xml {
... the response for API clients
}
format.myformat {
... your custom format - you can literally name it anything you want
}
end
它旨在根据人们用于请求您的信息的格式来自定义响应。上面只是一个例子,但通常如果你要构建一个API,你将不会回复HTML,因为那时客户端可能不得不解析一堆与它们无关的标签(例如标签,等)。
您不必使用XML - 您可以使用任何格式(JSON,XML,甚至您自己的自定义格式)。
检查你的“routes.rb”文件,你会明白我的意思。路由可以包含:格式符号,这是告诉控制器所请求的格式。这就是控制器如何知道要执行的代码块。
另外,如果你去here并搜索“:format”,我也会帮忙。
答案 1 :(得分:0)
以下是您所说的方式:
理想情况下,我想扩展验证框架,添加:api_message => 'USERNAME_TOO_SHORT', ...然后选择在API的视图或控制器中使用api_message。
在我的用户模型中添加“is_using_api”变量,并根据此变量的值适当地构建错误消息。不过,我真的不想以这种方式污染模型。
以上所有内容都不够好,或说好软件设计的不良实践 我建议: