我正在使用带有ruby 2.2的rails 4.2。 我正在尝试以散列格式在列中保存一些数据。
我正在尝试将license
列中的许可证详细信息保存为text
数据类型,并且在我给出的相应模型中:
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'
我尝试在表单中输入几个字段并提交,但即使params正确输入,保存的值也为null。这是日志:
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]]
答案 0 :(得分:0)
尝试使用licence
的强参数:
license: [:date1, :license1, :date2, :license2, :date3, :license3, :date4, :license4]
答案 1 :(得分:0)
如果您使用postgres作为数据库,则可以使用json
作为列的数据类型。
请参阅此处 - ActiveRecord JSON
如果您正在查询查询json字段,则应使用jsonb
字段。 Reference
但请注意jsonb
数据类型仅在postgresql v9.4中引入