Rails - Сохранение вложенных массивов - PullRequest
1 голос
/ 09 октября 2010

Мне удалось создать вложенные массивы в своем представлении, чтобы публиковать в своем действии "создать".Но я не уверен, как сохранить вложенный массив.

Вот базовое действие создания, в котором все отдельные параметры группируются в заданные по массе параметры:

def create
  @post = Post.new(params[:mass_assigned])
  respond_to do |format|
    if @post.save
      format.html
    else
      format.html
    end
  end
end

Но это возвращаетошибка нулевого объекта.Вероятно, это из-за того, что моя форма использует check_box_tag, а не check_box с, поставляется с изящной магией и приводит к тому, что: mass_assigned равен nil.Я довольно новичок в рельсах и был бы признателен, если бы все это заработало.Пожалуйста, объясните, как отформатировать мой метод для сбора отдельных параметров, а затем сохраните его.

Ответы [ 2 ]

0 голосов
/ 13 декабря 2011

Я боролся с этим целый день сам. Если вы все еще ищете ответ, и если я правильно понимаю ваш вопрос, попробуйте следующий пример:

a) Использовать строительные леса для Персона имя: строковый адрес: текст, чтобы настроить модель, просмотры и др.

б)

In app/models/person.rb:
class Person < ActiveRecord::Base
        attr_accessible :address, :name
    serialize :address
end

Представление скаффолдинга имеет одинаковую часть _form для новых и редактируемых представлений. Вы можете получить новые и показать действия для успешного завершения, введя следующий код в форму:

<%= form_for(@person) do |f| %>
 ...
      <%= f.fields_for :address do |address_fields| %>
        Street  : <%= address_fields.text_field :street %>
        Zip code: <%= address_fields.text_field :zip_code %>
      <% end %>
...
<% end %>

Однако представление редактирования не заполняет текстовые поля значениями из модели с приведенным выше кодом. Чтобы решить эту проблему, вам нужно извлечь значение из хэша @ person.address и явно присвоить его тексту. Если вы используете представления скаффолдов, то форма обычно визуализируется с использованием части _form. Это усложняет ситуацию, потому что добавление кода для извлечения значения компонентов адреса уносит новый объект. Вы можете обойти это, инициализировав хеш адреса во время Person.new или проверив на ноль, как сделано ниже:

  <%= f.fields_for :address do |address_fields| %>
    Street  : <%= address_fields.text_field :street,:value => @person.address.nil? ? "":@person.address["street"] %>
    Zip code: <%= address_fields.text_field :zip_code,:value => @person.address.nil? ? "":@person.address["zip_code"] %>
  <% end %>

Надеюсь, это поможет.

0 голосов
/ 08 августа 2011

Я не уверен, что ваша проблема - просто сохранение объекта или вы хотите его сериализовать - и ваша проблема в том, что ваш «вложенный массив», который вы хотите вставить в db, выравнивается перед сохранением или чем-то еще.

Если это первое, тогда убедитесь, что у вас есть параметры [: mass_assigned].Вы всегда можете добавить строку в верхней части вашего метода контроллера:

throw params

... и отправить свою форму, чтобы увидеть, что у вас есть, и изучить структуру.Было бы неплохо увидеть код формы, которую вы отправляете, с обратным следом ошибки приложения, взятой из журналов

Если это второй случай, то дайте мне знать, и я перезвоню вам;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...