PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

lỗi đa tham số với datetime_select

Cơ đốc giáo. Đây là một lỗi trong Rails kiểm tra cơ sở dữ liệu để suy ra loại cần thiết cho các thuộc tính đa tham số. Tôi đoán là thuộc tính "date_time" của bạn không được liên kết với cột thời gian trong cơ sở dữ liệu của bạn.

Gần đây tôi đã giải quyết vấn đề này trong đó tôi muốn một thuộc tính không phải cơ sở dữ liệu cho các thuộc tính đa tham số được chấp nhận, đây là giải pháp tốt nhất mà tôi có thể đưa ra:

Tôi thấy mình muốn đặt attr_accessor để xử lý việc chuyển ngày đến mô hình của tôi trong form_for bằng thẻ f.datetime_select người giúp đỡ. Vì vậy, đây là những gì tôi đã có:

Mô hình:

attr_accessor :my_time

Xem:

<%= f.datetime_select :my_time %>

Thật không may khi tôi gửi biểu mẫu của mình, tôi nhận được thông báo này:

1 error(s) on assignment of multiparameter attributes

Hóa ra đây thực sự là một lỗi Rails, một tấm vé đã được gửi. Trong khi chờ đợi, làm thế nào để chúng tôi làm cho việc này hoạt động? Giải pháp duy nhất mà tôi có thể thấy là hấp dẫn từ xa là sử dụng composed_of thay thế cho attr_accessor . vì vậy ...

Mô hình:

  composed_of :my_time,
              :class_name => 'Time',
              :mapping => %w(Time to_s),
              :constructor => Proc.new{ |item| item },
              :converter => Proc.new{ |item| item }

Tôi hầu như không biết gì về composed_of vì vậy bạn có thể nên tự đọc nó, nhưng những gì tôi biết là nó tạo ra cả người đọc và người viết cho biến cá thể đã cho, và quan trọng hơn, bộ thiết lập chấp nhận các thuộc tính đa tham số. Cách tôi chọn các tùy chọn:

class_name:tên của lớp dự kiến ​​của chúng ta. Trong trường hợp này, Time Ánh xạ
:đối số đầu tiên là lớp và đối số thứ hai dường như hoạt động với bất kỳ phương thức nào mà một thể hiện của lớp phản hồi. Tôi đã chọn to_s constructor:Không thực sự chắc chắn về cách thức hoạt động của nó. Có vẻ như được gọi khi @my_timenil .
chuyển đổi:Không thực sự chắc chắn về cách thức hoạt động. Có vẻ như được gọi khi từ my_time =, nhưng dường như không được áp dụng với phân công hàng loạt.Một vấn đề mà tôi gặp phải với giải pháp này là thời gian được đặt theo UTC thay vì múi giờ của môi trường. Vì vậy, rất tiếc là chúng tôi không thể sử dụng my_time trực tiếp mà thay vào đó cần chuyển nó sang múi giờ thích hợp:

Time.zone.parse(my_time.to_s(:number))


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Các tùy chọn để truy xuất giá trị trình tự hiện tại (tại một thời điểm đang chạy truy vấn)

  2. pg_dump với người dùng không có superradmin và các đối tượng lớn

  3. Chuyển đổi chuỗi hex sang bigint trong Postgres

  4. LỖI:cột quan hệ không tồn tại PostgreSQL, Không thể chạy truy vấn chèn

  5. Thoát dữ liệu đầu vào cho postgres