【问题标题】:serialize a column and save序列化列并保存
【发布时间】:2016-05-01 21:49:09
【问题描述】:

我正在使用带有 ruby​​ 2.2 的 rails 4.2。 我正在尝试以哈希格式将一些数据保存在列中。

我正在尝试将许可证详细信息保存在 license 数据类型的 license 列中,以及我给出的相应模型中:

serialize :license, JSON

我在控制器中有这个:

params.require(:company_detail).permit(:company_name, :trading_name, :contact_name, :acn, :address, :suburb, :state, :post_code, :phone_number, :fax_number, :nrma_approved, :start_date, :release_date , :website_url ,:email, license: {date1: :date1, license1: :license1, date2: :date2, license2: :license2, date3: :date3, license3: :license3, date4: :date4, license4: :license4})

在形式上

= form_for @company_detail, remote: true, html: {class: 'form-horizontal form-label-left', data: {"parsley-validate" => ""}} do |f|
      = f.fields_for :license do |l|
        .row
          .col-lg-6
            .form-group
              %label.control-label.col-md-4.col-xs-12 Date 1
              .col-md-8.col-xs-12
                = l.text_field :date1, value: @company_detail.license.present? ? @company_detail.license["date1"] : '', class: 'date-picker form-control has-feedback-left datePicker'
          .col-lg-6
            .form-group
              %label.control-label.col-md-4.col-xs-12 Licence Number 1
              .col-md-8.col-xs-12
                = l.text_field :license1, value: @company_detail.license.present? ? @company_detail.license["license1"] : '', class: 'form-control'

我尝试在表单中输入几个字段并提交,但即使参数输入正确,保存的值也是空的。这是日志:

Parameters: {"utf8"=>"✓", "company_detail"=>{"license"=>{"date1"=>"121212", "license1"=>"12313", "date2"=>"122131123", "license2"=>"123123", "date3"=>"", "license3"=>"", "date4"=>"", "license4"=>""}}, "commit"=>"Save", "id"=>"1"}
CompanyDetail Load (0.3ms)  SELECT  "company_details".* FROM "company_details" WHERE "company_details"."id" = $1 LIMIT 1  [["id", 1]]
 User Load (0.8ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = $1  ORDER BY "users"."id" ASC LIMIT 1  [["id", 1]]
 (1.0ms)  BEGIN
SQL (0.4ms)  UPDATE "company_details" SET "license" = $1, "updated_at" = $2 WHERE "company_details"."id" = $3  [["license", "{\"date1\":null,\"license1\":null,\"date2\":null,\"license2\":null,\"date3\":null,\"license3\":null,\"date4\":null,\"license4\":null}"], ["updated_at", "2016-05-01 12:15:44.918547"], ["id", 1]]

【问题讨论】:

标签: ruby-on-rails ruby ruby-on-rails-4


【解决方案1】:

试试这个licence 的强参数:

license: [:date1, :license1, :date2, :license2, :date3, :license3, :date4, :license4]

【讨论】:

  • 嗨@tirdadc 你的回答有帮助,我可以在序列化列中进行 where 查询
  • 如果您想对数据进行查询,您应该按照@Alfie 的建议为您的列使用 JSONB 数据类型。序列化数据主要用于读/写。
  • 有关使用 JSONB 的更多信息,请参阅此 SO 答案(您也需要 Rails 4.2+):stackoverflow.com/questions/27462929/…
【解决方案2】:

如果您使用 postgres 作为数据库,那么您可以使用 json 作为列的数据类型。

请看这里 - ActiveRecord JSON

如果您要查询 json 字段,则应使用 jsonb 字段。 Reference

但请注意jsonb 数据类型仅在 postgresql v9.4 中引入

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-25
    相关资源
    最近更新 更多