我将表单输入序列化为哈希。是否有可能强制将某些输入转换为整数?
例如,如果我执行@ user.update_attributes(params [:user]),并且其中一个参数应该是一个数字,那么该数字将被存储为类似" 123"的字符串。
是否可以确保将其存储为整数?
要明确:
我的用户模型看起来像
class User < ActiveRecord::Base
...
store :preferences, accessors: [:max_capacity]
...
end
我的表单可能有像
这样的输入<input name="user[preferences][max_capacity]" type="text"/>
这将导致max_capacity存储为String。我存储它时可以强制它为整数吗?
答案 0 :(得分:0)
您可以在保存之前直接修改存储在params哈希中的用户对象。如果将max_capacity从字符串转换为整数,则需要考虑用户为max_capacity提交错误值的情况。这可以通过开始/救援块来处理。
在您的Controller操作中,您可以执行以下操作:
def update
max_capacity = params[:user][preferences][max_capacity]
begin
# Attempt to convert into an integer
Integer(max_capacity)
rescue
# If max_capacity was incorrectly submitted: 'three', '04', '3fs'.
redirect_to edit_user_path, :alert => "Unable to update user. Invalid max capacity."
else
If it can be converted, do so, and update the user object in the params hash.
params[:user][preferences][max_capacity] = Integer(max_capacity)
end
@user.update_attributes(params[:user])
.
.
.
end