在Rails 3中,它基于3.1,所以它的种类老了,因为我使用3.2.12,当我试图分配管理员而没有让它免费进行质量分配时会引发错误,那就是因为3.1和3.2之间的差异如作者说。 所以最好使用以下内容,有什么区别?
控制器中的第一个方法
def create
@user = User.new(params[:user], :as => :admin)
if @user.save
flash[:notice] = "User has been created."
redirect_to admin_users_path
else
flash[:alert] = "User has not been created."
render :action => "new"
end
end
和模型
attr_accessible :email, :password, :admin, :as => :admin
控制器中的第二种方法
def create
@user = User.new(params[:user], :without_protection => true)
@user.admin = params[:user][:admin] == "1"
if @user.save
flash[:notice] = "User has been created."
redirect_to admin_users_path
else
flash[:alert] = "User has not been created."
render :action => "new"
end
end
不在模型中添加上面的行
哪一个会保护免受大规模分配或两者都是免费的?
答案 0 :(得分:1)
attr_accessible
和:without_protection => true
都可用于在定义模型的属性上进行质量分配。
所以最好使用以下内容,有什么区别?
要回答这个问题,我认为使用attr_accessible
会更好,因为您可以准确定义您希望进行质量分配的属性与打开所有属性的:without_protection => true
相比较在您的模型中进行批量分配。
通常,如果你确切地知道用户输入是什么,那么传递:without_protection => true
是可以的,例如播种数据时但是对于来自表单(用户输入)的输入,您希望准确指定批量分配所允许的内容。
希望这有帮助。
<强>更新强>
在以下声明中,您向as
提供的attr_accessible
选项确认仅当用户为email, password and admin
时才允许属性admin
。
attr_accessible :email, :password, :admin, :as => :admin