2016-06-14 7 views
1

На странице редактирования для этой формы все поля вне тега fields_for (имя почтового ящика, автоматическое согласование и несколько других, не указанных здесь) все заполняются на основе их соответствующих db стоимость. Тем не менее, все, что находится в теге fields_for, не является, хотя они публикуются в db просто отлично.Сериализованные fields_for не заполняется с db on edit

Я отправил: group_member_roles в качестве примера, но есть еще несколько полей внутри их собственного другого fields_for, которые делают то же самое. Это просто сбивает с толку, что он отправит сообщение в db, но не будет отображаться при редактировании.

Чем больше я читаю в fields_for, тем больше я чувствую, что не использую его правильно. Представляется более склонным к заполнению таблиц db за пределами того, на который ссылается ваша форма, но я просто пытаюсь сериализовать данные в таблице входящих сообщений. Когда я смотрю на столбец: group_member_roles, я хочу, чтобы он был массивом/хешем, содержащим процесс true/false, action add/delete и строку значений.

#_form.html.erb 

<%= form_for(@inbox) do |f| %> 
    <%= f.label :inbox_name %> 
    <%= f.text_field :name, placeholder: "Inbox Name" %> 
    <%= f.label :automatic_reconciliation, "Turn on/off automatic reconciliation" %> 
    <div class="switch small"> 
    <%= f.check_box :automatic_reconciliation, class: "switch-input" %> 
    <label class="switch-paddle" for="inbox_automatic_reconciliation"> 
     <span class="show-for-sr">Automatic reconciliation</span> 
     <span class="switch-active" aria-hidden="true">On</span> 
     <span class="switch-inactive" aria-hidden="true">Off</span> 
    </label> 
    </div> 
    <%= f.fields_for :group_member_roles do |group_member_roles| %> 
    <h4>Group Member Roles</h4> 
    <%= group_member_roles.label :process, "Turn On/Off Processing" %> 
    <div class="switch small"> 
    <%= group_member_roles.check_box :process, class: "switch-input" %> 
    <label class="switch-paddle" for="inbox_group_member_roles_process"> 
     <span class="show-for-sr">Group Member Roles Processing</span> 
     <span class="switch-active" aria-hidden="true">On</span> 
     <span class="switch-inactive" aria-hidden="true">Off</span> 
    </label> 
    </div> 

    <%= group_member_roles.label :action, class: "hide" %> 
    <%= group_member_roles.select :action, ["Add", "Delete"], { selected: "Add" }, { class: "hide" } %> 

    <%= group_member_roles.label :values %> 
    <%= group_member_roles.text_field :values, placeholder: "1234, 1337, 1986" %> 
    <% end %> 

Заранее благодарим за помощь или руководство.

+0

Значит, вы хотите сказать, что в вашей папке «Входящие» вы можете сделать index.group_member_roles.first.process. Можете ли вы нажимать свой код на github? – Saad

+0

Конечно, вот ссылка на ветку, над которой я работаю: https://github.com/npmdigital/ondeck/tree/s7_add_group_role_and_tag_to_inbox Также нет, я не могу запустить first.process на нем, но если я ищу @ index.group_member_roles [: process] показывает строку. –

+0

Поскольку у вас есть вложенное поле, попробуйте http://stackoverflow.com/a/37783164/1087841, не уверен, что это решение будет для вас, но я не думаю, что у меня был доступ к вашему приложению, чтобы посмотреть на него , – Saad

ответ

0

Поля были сохранены как хэш, и поле искало объект для заполнения, поэтому я добавил объект Dummy OpenStruct к полям_for, чтобы сделать это так. Если кто-нибудь может подумать о лучшем способе, сообщите мне, потому что это довольно уродливый код.

<%= f.fields_for :group_member_roles, OpenStruct.new(f.object.group_member_roles) do |group_member_roles| %>