Как установить и снять build_association в зависимости от содержимого текстового поля в Rails? - PullRequest
0 голосов
/ 22 февраля 2012

У меня есть простая форма Rails, которая использует условное build_association (если еще нет связанного родителя), чтобы включить текстовое поле для редактирования родителя.Это полезно, если нужно добавить новую запись для родителя.Проблема в том, что если родительский объект уже существует, если текстовое поле обновлено, оно будет изменено для родительской записи, затрагивающей множество дочерних элементов.Если build_association вызывается независимо от того, существует ли родительская ассоциация, то постоянно будут создаваться новые дублирующие родители.

Я пытаюсь понять, как я могу использовать build_association и fields_for для добавления нового родителя в базу данных, если пользователь вводит незнакомое имя, но для установки родителя в существующую запись, если имя соответствуетимя существующего родителя.(Если я смогу заставить эту часть работать правильно, следующим шагом будет добавление автозаполнения.) Код ниже:

    <%= form_for @sermon, :html => { :multipart => true } do |f| %>
      <div class="field">
        <%= f.label :title %><br />
        <%= f.text_field :title %>
      </div>
      <div class="field">
        <%= f.label :date %><br />
        <%= f.text_field :date %>
      </div>
<div>
    <% @sermon.build_speaker unless @sermon.speaker %>
        <%= f.fields_for :speaker do |g| %>
            <%= g.label :name, "Speaker name:" %><br />
            <%= g.text_field :name %>
            <%= g.submit %>
        <% end %>
    </div>
      <div class="actions">
        <%= f.submit %>
      </div>
    <% end %>

1 Ответ

1 голос
/ 18 сентября 2012

Думаю, мой драгоценный камень get_or_build будет вам полезен. У меня была та же проблема, и я не нашел подходящего чистого решения, поэтому я решил написать этот драгоценный камень. Наслаждайтесь!

...