tom*_*nek 7 ruby validation ruby-on-rails ruby-on-rails-3
当我尝试将用户编辑为管理员时,我想跳过验证.
模型
class User
...
attr_accessible :company_id, :first_name, :disabled, as: :admin
Run Code Online (Sandbox Code Playgroud)
调节器
class Admin::UsersController
...
def update
@user = User.find(params[:id])
@user.update_attributes(params[:user], as: :admin)
redirect_to edit_admin_user_path(@user), :notice => "User Account Updated"
end
Run Code Online (Sandbox Code Playgroud)
所以我试着改变update行动
def update
@user = User.find(params[:id])
@user.attributes = params[:user]
@user.save(validate: false)
redirect_to edit_admin_user_path(@user), :notice => "User Account Updated"
end
Run Code Online (Sandbox Code Playgroud)
但后来我没有访问set :disabled和:company_id属性,因为我不知道在哪里设置as: :admin
Mik*_*iet 13
试试这个:
@user = User.find(params[:id])
@user.assign_attributes(params[:user], as: :admin)
@user.save(validate: false)
Run Code Online (Sandbox Code Playgroud)
这已成为rails很长一段时间的问题,在Rails 4中它们引入了"强参数"
您也可以在rails 3应用程序中使用强参数gem
另一种方法,在用户模型上引入一个上下文变量 - *注意我不熟悉attr_accessible的'as'选项*
class User < ActiveRecord::Base
attr_accessor :is_admin_applying_update
validate :company_id, :presence => :true, :unless => is_admin_applying_update
validate :disabled, :presence => :true, :unless => is_admin_applying_update
validate :first_name, :presence => :true, :unless => is_admin_applying_update
# etc...
Run Code Online (Sandbox Code Playgroud)
在管理控制器中,将is_admin_applying_update属性设置为true
class Admin::UsersController
# ...
def update
@user = User.find(params[:id])
@user.is_admin_applying_update = true
@user.update_attributes(params[:user])
Run Code Online (Sandbox Code Playgroud)
注意:您还可以对验证进行分组并使用单个条件
| 归档时间: |
|
| 查看次数: |
5243 次 |
| 最近记录: |