class Users < ApplicationController
def create
@user = User.create params[:user]
end
end
这类方法是我们常用的表单到模型的附值了。
也是经常出现漏洞的地方。具体有哪些漏洞就不说,网上有很多介绍。
通常我们为了解决这个问题都在Model中用attr_protected
或 attr_accessible
来解决。
另外还可以通过精确挑选需要的值来进行操作。
class Users < ApplicationController
def create
@user = User.new
@user.login = params[:user][:login]
@user.password = params[:user][:password]
@user.password_confirmation = params[:user][:password_confirmation]
@user.save
#user is 创建了, 但is_admin 权限没有附值
end
end
为了简化代码,我们只用到了下面五行解决
class Users < ApplicationController
def create
@user = User.create(
params.split_off(:login, :password, :password_confirmation) )
end
end
这是一DRY应用,split_off 在helper中
class Hash
def split_off(*keys)
h = {}
keys.each { |key| h[key] = self[key] }
h
end
排除的版本
def split_off!(*keys)
h = {}
keys.each { |key| h[key] = delete key }
h
end
end
允许一个不同的action (和一个block) ,如果他们key中没有value:
class Hash
def split_off(*keys)
h = {}
if block_given?
keys.each do |key|
val = self[key]
h[key] = val.nil? ? yield(key) : val
end
else
keys.each { |key| h[key] = self[key] }
end
h
end
def split_off!(*keys)
h = {}
if block_given?
keys.each do |key|
val = delete(key)
h[key] = val.nil? ? yield(key) : val
end
else
keys.each { |key| h[key] = delete(key) }
end
h
end
end
分享到:
相关推荐
您可以将它们视为attr_protected和attr_accessible的控制器类似物。 安装 Rails的2.3.x版本 gem install param_protected -v "~> 1.0.0" Rails的3.0.x中 gem "param_protected" , "~> 2.0.0" 感谢提供了Rails 3...
gem的最新版本仅适用于Rails 3.2.x 这是一个ActiveModel插件,可以在attr_accessible类方法中定义块。 不支持attr_protected 。 由于块的原因,可以为实例定义访问权限,而不仅仅是为类级别定义。 仍然可以定义类...
可访问强参数的属性 自动将 Rails 3 attr_accessible 转换为 Rails 4 强参数安装 $ gem install attr_accessible2strong_params用法 $ aa2sp [filename OR dirname OR .]运行aa2sp . 在您的 rails 根文件夹中,程序...
attr_extras, 使用attr_initialize之类的方法从 ruby 中取出一些样板 attr_extras从 ruby 中提取一些样板,降低了提取小型聚焦类的障碍,而不考虑使用 Struct 函数的缺点。代替class InvoiceBuilder def initialize...
WPS_attr_build是与构建WPS属性相关的编程实现,通常涉及到Wi-Fi设备的认证和加密过程。在本文中,我们将深入探讨WPS的属性构建以及`wps_attr_build.c`源代码文件在这一过程中的作用。 1. **WPS简介** WPS是由Wi-...
安装将attr_encrypted添加到您的gemfile中: gem "attr_encrypted" , "~> 3.1.0" 然后安装gem: bundle install用法如果您正在使用ActiveRecord , DataMapper或Sequel类的ORM,则使用attr_encrypted很容易: class ...
“xfs_attr_leaf.c”和“xfs_attr_leaf.h”两个文件,分别代表了这个机制的源代码实现和头文件定义。在“xfs_attr_leaf.c”中,包含了实现属性叶块操作的函数,如插入新属性、查找属性、更新属性和删除属性等。这些...
"attr_copy.rar_The_Returning"这个标题暗示我们关注的是一个与复制文件属性相关的程序或函数,可能是一个C语言编写的源代码文件,即"attr_copy.c"。这个程序的功能是复制一个属性列表,并返回所占用的字节数。 `...
"eos_attr_hdf"则表明代码可能专注于读取和操作HDF文件中与EOS相关的属性。在EOS数据中,属性通常包含关于数据的元信息,如传感器信息、时间戳、地理位置等,这些信息对理解及处理科学数据至关重要。 在"描述"部分...
像pattr_initialize (或attr_private_initialize )和method_object这样的更高级别的方法也可以真正减少样板。 代替 class InvoicePolicy def initialize ( invoice , company : ) @invoice = invoice @...
《PyPI官网下载:attr_property-0.0.5-py3-none-any.whl》 在Python编程领域,PyPI(Python Package Index)是官方的软件仓库,它为开发者提供了丰富的第三方库,使得用户可以方便地下载和安装这些库。今天我们要...
【tjh_batch_attr_set 插件详解】 tjh_batch_attr_set 是一款专为 Maya 用户设计的批量属性管理插件,自2017年推出以来,它已经发展成为一个功能强大的工具,尤其适合大规模场景建模师、动画师、渲染师和特效师。该...
标题中的"xfs_attr_sf.rar_possible"暗示我们正在讨论与XFS文件系统相关的属性操作,特别是与文件属性存储的效率和空间利用率有关的问题。"possible"可能指的是在存储这些属性时如何尽可能地节省空间或提高效率。 ...
需要程序员经常刷题吗范围属性访问器 将范围访问器添加到 ruby。 您可以在私有或受保护范围内创建作者、读者和访问...protected_attr_reader :some_weird_counter end class Monkey < Primate # Monkey can def
android混淆工具Proguard,其中调整ATTR_StackMapTable值为dummy后重新编译打包。版本为5.3.3
受保护的属性续 这是Rails 5+的社区的继续版本。... 此gem添加了attr_accessible和attr_protected类方法来声明属性的白色或黑色列表。 安装 将此行添加到您的应用程序的Gemfile : gem 'protected_attributes_continu
要求Ruby 2.0 或更高版本安装将此行添加到应用程序的 Gemfile 中: gem 'attr_typecastable' 然后执行: $ bundle或者自己安装: $ gem install attr_typecastable默认类型转换对象(无类型转换) 细绳象征整数漂浮...
pthread_attr_init(&attr[i]);// 初始化线程属性 pthread_attr_setschedpolicy(&attr[i], SCHED_FIFO); // 设置调度策略 pthread_attr_setschedparam(&attr[i], ¶m[i]); // 设置优先级参数 pthread_attr_...
#weak_attr_accessor 用于 用法 做这个: class MainView < UIView weak_attr_accessor :view_controller end 而不是这个: class MainView < UIView def view_controller @view_controller end def...