Rails序列化哈希 - 是否可以指定数据类型?

时间:2014-03-13 20:16:44

标签: ruby-on-rails serialization

我将表单输入序列化为哈希。是否有可能强制将某些输入转换为整数?

例如,如果我执行@ 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。我存储它时可以强制它为整数吗?

1 个答案:

答案 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