Ruby on rails 有更好的方法在Rails中进行验证吗?
下面的示例是我今天如何验证我的用户:Ruby on rails 有更好的方法在Rails中进行验证吗?,ruby-on-rails,validation,Ruby On Rails,Validation,下面的示例是我今天如何验证我的用户: def create if is_internal_request(params[:authenticity_token]) @user = User.authenticate(params[:email], params[:password]) if @user session[:user_id] = @user.id render :json => true
def create
if is_internal_request(params[:authenticity_token])
@user = User.authenticate(params[:email], params[:password])
if @user
session[:user_id] = @user.id
render :json => true
else
render :json =>
{
error:
{
code: 1,
message: t('globals.errors.authentication.user-not-found')
}
}.to_json
end
end
end
请注意这个片段:
render :json =>
{
error:
{
code: 1,
message: t('globals.errors.authentication.user-not-found')
}
}.to_json
基于此,我想知道它是否有条理和坚实。我的意思是,这是正确的吗
前瞻性思维
假设我的应用程序中有一些地方可以检查用户的电子邮件可用性。我希望在每次需要使用验证时都能保持干燥并重复使用它。如果我进行验证的方式(如下所示)一点也不“完美”,那么我如何创建一个每次都有用的验证层呢
我的意思是,不是每次我想验证的时候都要创建和重新创建代码片段,做这样的事情最好的方法是什么
email = params[:email]
unless email_is_available(email)
render :json => { message: 'E-mail isn't available' }
end
“做这样的事情最好的方法是什么?”我是说,我必须把
电子邮件放在哪里才能正常工作?
功能可用吗?每个控制器都可以访问继承自它的ApplicationController
方法
无论如何,我建议使用gem-like来获得更完整的解决方案
GL&HF.像这样的东西怎么样
if @user.valid?
render :json => true
else
error_hash = {}
@user.errors.each{|k,v| error_hash[k] = "#{k.capitalize} #{v}"}
#this will give you a hash like {"email" => "Email is not available"}
render :json => {:errors => error_hash}
end
在客户端,您将返回该值(例如作为名为data
的对象),查看是否存在data.errors的值,然后向用户显示各种错误消息
注意,我没有插入任何翻译内容,但您可以这样做:)我建议您查看Ryan Bates的Railscast,从头开始进行身份验证。它会引导你解决所有的问题,而且比依靠像Desive这样又大又重的东西要轻得多
谈论良好实践(注意:良好实践,而不是模式):将验证行为放置在
应用程序控制器中是一种很好的做法
?它取决于代码的扩展/模块性/etc是否值得拥有自己的模块。@user。错误
来自用户
模型的验证标志,对吗?是的。这是作为调用@user.valid的副作用填充的。我们这里有一个问题,因为@user.valid
和@user.errors
都不存在。它的.valid?
(带问号)不是.valid
。尽管它在您的Rails版本中可能已更改,但请检查相应的API文档。