【问题标题】:Array of integers is being saved as array of strings整数数组被保存为字符串数组
【发布时间】:2015-08-20 16:14:53
【问题描述】:

我的模板中有这个:

<%= f.hidden_field :user_ids, multiple: true, value: 1 %>
<%= f.hidden_field :user_ids, multiple: true, value: 2 %>

在控制器上我有这个来确保数组是一个整数数组。我测试了它,它工作正常:

before_filter :parse_json_request

  def parse_json_request
    params[:keepcon_settings_users_group][:user_ids] = params[:keepcon_settings_users_group][:user_ids].map(&:to_i) if params[:keepcon_settings_users_group][:user_ids]
  end

问题是数据以 yaml 格式存储,但格式如下:

---
- '1'
- '2'

我需要这样:

---
- 1
- 2

我的班级是:

class UsersGroup < ActiveRecord::Base
  belongs_to :account_setting
  serialize :user_ids, Array
  attr_accessible :name, :user_ids
  after_initialize :set_defaults

  def set_defaults
    if !self.user_ids or self.user_ids == ''
      self.user_ids = []
    end
  end

end

【问题讨论】:

    标签: ruby-on-rails arrays ruby string yaml


    【解决方案1】:

    我认为来自 HTML 表单的传入数据总是作为字符串发送。您可以通过在每个参数上调用 to_i 来修复它,如下所示:

    user_ids.map!(&:to_i)
    

    【讨论】:

    • 我在这里:params[:keepcon_settings_users_group][:user_ids].map(&:to_i)
    • 糟糕 - 没有看到排长队!转换是否有效?您可以在下一行尝试puts params[:keepcon_settings_users_group][:user_ids].first.class.name
    • YAML 保存在哪里?
    • 问题是我使用前置过滤器的顺序!谢谢马特
    • Form 递给我这个 ""1,2" 应用这个方法得到:未定义的方法 `map!'对于“1,2”:字符串
    猜你喜欢
    • 2021-04-20
    • 1970-01-01
    • 2016-06-01
    • 1970-01-01
    • 2019-04-21
    相关资源
    最近更新 更多