Rails 询问一个有关模型的验证问题

wuwx · 2012年12月16日 · 最后由 wuwx 回复于 2012年12月17日 · 2060 次阅读

一个数据模型有 2 个控制器分别操作他

比如一个是:/users 另外一个是:/admin/users

现在要求通过 /users 更新的时候,必须输入 email 字段 假如是通过 /admin/users 更新的时候,无须输入 email 字段

请问这种需求应该如何写验证呢?

只能是 Controller 层验证了吧,Model 层验证是不可能了。话说哪有这种如此奇怪的约束的?

user = User.find params[:id]
user.update_attributes params[:user].merge(email: user.email)

一个 bad method 是在 Model 中判断管理员是否已登录,然后 validates_presence_of :email, :if => :not_admin_signed_in?

#3 楼 @geekontheway 管理员登陆后也有可能在前台修改用户的账户呀

#2 楼 @jjym 后台更新用户信息的时候,邮件地址是可选输入,这个 user.email 有可能是空的

#1 楼 @iBachue 模型字段特别多,所以希望在后台输入的时候能少输入一些

我在项目中也碰到这个问题,不过我在用 java = = 我的解决方案非常简单,就是 email 这个字段只用 js 验证 理由很简单,既然 admin 可以不用输入 email 字段,那么就说明 email 字段并非必须的 至少从数据库上看是这样的 如果用 java 的话,可以自定义一个 form 对象来做后端的验证,不得不感叹 java 的繁琐偶尔有用了一把= =

#5 楼 @Teddy 恩,用 js 验证确实是个不错的好想法哟

需要 登录 后方可回复, 如果你还没有账号请 注册新账号