Как предотвратить использование Rails для обработки полей редактирования - для других, чем для новых полей - для - PullRequest
2 голосов
/ 19 мая 2010

Я использую rails3 beta3 и couchdb через couchrest. Я не использую активную запись.

Я хочу добавить несколько «Разделов» в «Руководство» и динамически добавлять и удалять разделы с помощью небольшого javascript. Я посмотрел все экраны, сделанные Райаном Бейтсом, и они очень помогли. Разница лишь в том, что я хочу сохранить все разделы в виде массива разделов, а не отдельных разделов. В основном так:

"sections" => [{"title" => "Foo1", "content" => "Bar1"}, {"title" => "Foo2", "content" => "Bar2"}]

Итак, в основном мне нужно, чтобы хэш params выглядел так, когда форма отправлена. Когда я создаю свою форму, я делаю следующее:

<%= form_for @guide, :url => { :action => "create" } do |f| %>
  <%= render :partial => 'section', :collection => @guide.sections %>   
  <%= f.submit "Save" %>
<% end %>

А мой частичный раздел выглядит так:

<%= fields_for "sections[]", section do |guide_section_form| %>
  <%= guide_section_form.text_field :section_title %>
  <%= guide_section_form.text_area :content, :rows => 3 %>
<% end %>

Хорошо, поэтому, когда я создаю руководство с разделами, оно работает идеально, как мне хотелось бы. Хэш params дает мне массив разделов, как я хотел бы. Проблема возникает, когда я хочу отредактировать руководство / разделы и сохранить их снова, потому что rails вставляет идентификатор руководства в идентификатор и имя каждого поля формы, что приводит к искажению хеша параметров при отправке формы.

Просто чтобы прояснить, вот необработанный вывод формы для нового ресурса:

<input type="text" size="30" name="sections[][section_title]" id="sections__section_title">
<textarea rows="3" name="sections[][content]" id="sections__content" cols="40"></textarea>

А вот как это выглядит при редактировании существующего ресурса:

<input type="text" value="Foo1" size="30" name="sections[cd2f2759895b5ae6cb7946def0b321f1][section_title]" id="sections_cd2f2759895b5ae6cb7946def0b321f1_section_title">
<textarea rows="3" name="sections[cd2f2759895b5ae6cb7946def0b321f1][content]" id="sections_cd2f2759895b5ae6cb7946def0b321f1_content" cols="40">Bar1</textarea>

Как заставить рельсы всегда использовать новое поведение ресурса и не добавлять идентификатор автоматически к имени и значению. Нужно ли создавать пользовательский конструктор форм? Есть ли какой-нибудь другой прием, который я могу сделать, чтобы рельсы не указывали там идентификатор гида? Я перепробовал кучу вещей, и ничего не работает.

Заранее спасибо!

1 Ответ

1 голос
/ 19 мая 2010

Хорошо, я думаю, что понял что-то, что работает. Изменение первой строки партиала на:

<%= fields_for "sections", section, :index => "" do |guide_section_form| %>

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

...