Activity
Hi all,
I am working on fixing an issue that came up in our app and have been struggling to nail this one down.
I have a Company model that is a one to one with a FileCompleteness model so I have
class Company < ApplicationRecord
has_one :file_completenes
end
class FileCompleteness < ApplicationRecord
belongs_to :company
end
I have an attribute on my FileCompleteness model called "custom_documents" that is setup as text column and is set to
serialize :custom_documents, Hash
The way it's stored in the database is like:
cd_document_1:
name: "Custom Document"
required: 0
The initial bug I ran into is that when the update action runs, it's looking for an attribute called "cd_document_1" which doesn't exist because that is stored in the "custom_documents" column but the form that has the checkbox to toggle the required attribute was being stored with the name "cd_document_1" or whatever custom name is given to that document.
So in the form, I changed it to use the fields_for helper which now kind of works, but I'm running into 2 issues.
Form looks like:
<%= f.fields_for :file_completeness do |setting| %>
<%= setting.fields_for :custom_documents do |cd| %>
<%= cd.fields_for field do |fd| %>
<%= fd.hidden_field :name, value: file_completeness.custom_documents[field.to_s]&.fetch(:name) %>
<%= fd.smarty_on_off_switch(:required) %>
<% end %>
<% end %>
<% end %>
If I look at the checkbox in dev tools the form field name is the following:
company[file_completeness_attributes][custom_documents][cd_document_1][required]
- The data is going from looking like:
cd_document_1:
name: Custom Document
required: 0
To:
-- !ruby/hash:ActiveSupport::HashWithIndifferentAccess
cd_document_1: !ruby/hash:ActiveSupport::HashWithIndifferentAccess
name: Custom Document
required: '1'
And the other issue is that the required attribute is being turned into a string rather than a boolean.
Does anyone have suggestions on how I can make this behave as intended?
Thank you,
Ben