Active Record Store cho phép bạn tuần tự hóa các tham số bên trong một ô đơn lẻ.Trình truy cập cửa hàng động đang hoạt động dựa trên biểu mẫu người dùng?
I.e.
class User < ActiveRecord::Base
store :options, accessors: [ :option1, :option2, :another_random_option ]
end
Tất cả các trình truy cập được tuần tự hóa trong cột "tùy chọn" của bảng người dùng ngay bây giờ.
u = User.new
u.option2 = 'some option'
u.option2 # => 'some option'
này hoạt động tuyệt vời cho ứng dụng của tôi bởi vì tôi có để tạo ra nhiều hình thức trên một cơ sở hàng ngày, nơi 90% dưới hình thức là như nhau (username, sở thích, sở thích, vv) và sau đó 10% là schema -Không (random_option_here, another_random_option_in_another_form). Tôi cũng không bao giờ cần sắp xếp theo các tùy chọn lược đồ-ít.
Tôi đã tạo 1 bảng cho 90% trường biểu mẫu luôn giống nhau và sau đó tôi có một bảng khác với 10% trường cuối cùng (lý do tôi có bảng khác là vì điều này là mối quan hệ thuộc tính, vì vậy người dùng có thể có nhiều hàng trong bảng này).
<%= form_tag do %>
<%= #render partial form for an object that has non-changing fields %>
...
<%= #render a schema-less partial form based off an ID passed here %>
<% end >
Bây giờ vấn đề duy nhất là mỗi khi tôi tạo ra một lĩnh vực mới trong hình thức tùy chỉnh, tôi phải thêm tham số đó để Active Record Store accessors, nếu không tôi có được một phương pháp thiếu lỗi. Nó sẽ là tốt đẹp nếu tôi chỉ có thể đi vào và tạo ra nhiều dạng xem như tôi muốn cho các trường lược đồ-ít hơn và không bao giờ cập nhật các accessors trong Model. Vì vậy, câu hỏi của tôi là: Có cách nào để tự động thêm tất cả các trường tùy chỉnh đã gửi của người dùng vào mảng truy cập, theo cách đó nếu người dùng gửi trường "some_random_option1221", "another_option_here" thì tôi không phải đi sâu vào accessors array và thêm trường đó?
Cảm ơn!
Rất tuyệt, có vẻ như '' num_fields = options.try (: keys) .ry (: count) || 0'' là không cần thiết, bạn có thể thêm một giá trị mặc định '' {} '' vào các trường tùy chọn, vì vậy options.keys chỉ là một mảng trống. – zw963