2015-02-19 4 views
1

Я использую Rails 'form_for и fields_for, чтобы получить форму для вложенного атрибута json, но у меня нет значения при редактировании и вам нужно установить значение вручную:Вложенная модель неактивнойRecord не принимает значения модели

<%= f.fields_for :json do |ff| %> 
    <%= ff.text_field :attr, value: @app_configuration.json.attr %> 
<% end%> 

для того, чтобы получить мой JSON атр, чтобы быть читаемым я делаю это на моем контроллере:

@app_configuration.json = OpenStruct.new(JSON.parse(@app_configuration.json)) 

Почему я должен вручную Ассинг значения?

Как ff.text_field искать значение атрибута?

ответ

1

Вы должны использовать переменную строителя ff с использованием fields_for.

<%= f.fields_for :json, @app_configuration.json do |ff| %> 
    <%= ff.text_field :attr %> 
<% end%> 

Использование f.text_field :attr будет искать attr в родительской модели, которая не существует, и причина, почему вы не видите значения во время редактирования.

Для нестандартных объектов, которые вам также необходимо передать во втором параметре в fields_for, как показано на рисунке. См. Документацию по адресу fields_for.

+0

Спасибо, что указали это, но это была ошибка копирования/вставки от меня. Я использую переменную builder 'ff'. Просто обновил код. –

+0

Не могли бы вы проверить объект формы и убедиться, что это значение существует? Вы можете проверить это в контроллере с помощью 'logger.debug {obj.inspect}' или в файле вида с '<% = f.object.inspect%>' после объявления 'form_for'. – vee

+0

Я просто попробовал '<% = ff.object.inspect%>' и он выводит nil. если я пишу '<% = f.object.inspect%>', он выводит полный объект, но он, похоже, не работает с построителем 'ff'. Проблема, похоже, связана с этим. –

Смежные вопросы