Tôi có những điều sau đây.Trường băm được nối tiếp và Biểu mẫu đơn giản
class Page < ActiveRecord::Base
belongs_to :category
serialize :fields
end
Giá trị của fields
sẽ tùy thuộc vào danh mục. Nhưng làm ví dụ;
{"address" => "8 finance street, hong kong",
"founded" => "1973"}
Trong ví dụ này các loại đã xác định "address"
và "founded"
như các lĩnh vực tùy chỉnh.
Điều tôi muốn nói;
= simple_form_for(@page) do |f|
= f.association :category
- f.object.category.fields.each do |field|
= f.input field.name
Nhưng tôi cần phải làm một cái gì đó kỳ diệu để đối phó với thực tế là @page.founded
không hợp lệ
Thay vào đó tôi nên nhìn vào @page.fields["founded"]
.
Mọi đề xuất?
Cập nhật:
Tôi đã có một chút gần
- if f.object.category
- f.object.category.fields.each do |field|
= f.input field.name do
= text_field_tag "post[fields][#{field.name}]", f.object.fields[file.name]
Bây giờ cần phải thực hiện máy sấy này (không muốn nêu rõ tên của đối tượng).
Tôi sẽ xem liệu tôi có thể viết phần mở rộng biểu mẫu đơn giản cho việc này hay không.
+1 cho trường "f.simple_fields_for:, OpenStruct.new (@ page.fields) do | ff |". Tôi đã phá hỏng bộ não của mình trong một giờ để tìm ra lý do tại sao nó không lấy lại giá trị đúng cho đến khi tôi thêm bit OpenStruct. – gk0r
Điều này thật tuyệt vời. Một lưu ý bổ sung cho người dùng thông số mạnh mẽ: bạn phải xác định từng trường bạn thêm một cách rõ ràng. Ví dụ, 'params.require (: page) .permit (: fields => [: address,: founded])' –
Thx cho giải pháp, nó hoạt động hoàn hảo, với một ngoại lệ: Tôi không biết, cách thêm xác nhận lỗi cho '@ page.fields'. –