Ruby attr_accessible, validates, attr_accessor, cattr_accessor 区别

来源:互联网 发布:js 点击复制当前内容 编辑:程序博客网 时间:2024/04/30 06:11

attr_accessible

新建的时候Model里面有一个attr_accessible,从英文全称是attibutes accessible,字面意思是属性可访问

比如执行rails g model User name:string email:string,会建立如下的文件并自动添加上attr_accessible


class User < ActiveRecord::Base   

attr_accessible :name, :emailend

end


如果没有attr_accessible,那么默认是不能访问的,这是一种安全机制.


validates 

验证 validates_presence_of ,validates_length_of, validates_numericality_of ,allow_nil, allow_blank, message, on

Rails3 之后  

  validates :email, :presence =>true

          :length => {:minimum => 3, :maximum => 254, :message => "長度不正確" },

          :uniqueness => true,

          :email => true

          validate :my_validation  errors[:base] <<"can not be xxx"


attr_reader 及attr_accessor

主要是用来设置或读取类中的属性值.attr_reader是只读,不能设置 ,而attr_accessor即可读取也可以设置cattr_accessor

cattr_accessor

就相当于java的类静态变量, 对所有的类实例共享



rails 数据表单的保护:attr_accessor, attr_accessible and attr_protected

http://www.cnblogs.com/rywx/archive/2012/05/20/2510597.html

attr_accessor是Ruby语言的内置方法,此方法是为变量自动生成get set方法,从而可以省去一堆重复的get set方法。

attr_accessible和attr_protected是rails框架提供的方法



出現 ActiveModel::MassAssignmentSecurity::Error 錯誤?

Rails 3.2.8 之後的 3.2.X 版本預設將 config/application.rb 的 config.active_record.whitelist_attributes 設定改成 true,讓大量賦值(Mass assignment)功能失效(詳見安全性一章),造成範例中如 l = Location.new( :event => e ) 出現 ActiveModel::MassAssignmentSecurity::Error: Can't mass-assign protected attributes: event 的錯誤。解決方式有 1. 修改 config/application.rb 的 config.active_record.whitelist_attributes 設定為 false 2. 或是分開賦值 l=Location.new; l.event = e

Rails 4 之後又沒這個問題了,該 config.active_record.whitelist_attributes 設定被移除,預設改回允許大量賦值(Mass assignment),所以本書範例就不做修正了。
params.require(:person).permit(:name, :age)

http://edgeapi.rubyonrails.org/classes/ActionController/StrongParameters.html

0 0
原创粉丝点击