现在的位置: 首页 > 综合 > 正文

Ruby attr_accessible, validates, attr_accessor, cattr_accessor 区别

2018年09月08日 ⁄ 综合 ⁄ 共 1568字 ⁄ 字号 评论关闭

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

抱歉!评论已关闭.