Атрибуты динамической многомодельной формы Rails - PullRequest
2 голосов
/ 05 марта 2009

Эта проблема убивает меня. Я играл со сложными формами Райана Бейтса, но я не могу понять свою проблему. У меня есть эта схема:


Location has_many :targets
Target has_many :target_classifications

Все местоположения показаны на странице. Пользователь может создать цель для любого местоположения динамически через jscript, который затем добавляет строку таблицы под выбранным местоположением 3 (которая содержит доступные классификации для цели) и целевое значение. Перед нажатием кнопки «Сохранить» можно создать любое количество целей для любого местоположения.
Я использую RJS для визуализации target_partial, который имеет этот код: Я использую fields_for следующим образом:



для каждого выбора. При получении я получаю этот хэш:

"new_targets"=>
  {"7"=>[{"id"=>"13"}, {"id"=>"15"}, {"value"=>"67", "id"=>""}],
   "4"=>
    [{"id"=>"12"},
     {"id"=>"15"},
     {"value"=>"23", "id"=>""},
     {"id"=>"11"},
     {"id"=>"16"},
     {"value"=>"67", "id"=>""}]},

Таким образом, он разделяет каждую цель по местоположению (в данном случае «7» и «4»), но не разделяет каждую цель. То, что я хочу, это:

"new_targets"=>
  {"7"=>[
          {"target"=>[{"id"=>"13"}, {"id"=>"15"}, {"tonnes"=>"67"}]}
        ],
   "4"=>[
          {"target"=>[{"id"=>"12"},{"id"=>"15"},{"tonnes"=>"23"]},
          {"target"=>[{"id"=>"11"},{"id"=>"16"},{"tonnes"=>"67"]}
        ]
  }

так что я могу перебирать каждую цель для каждого местоположения. Я не могу добавить новую скобку [target] в моем методе field_for (он взрывается), но это то, что я хочу сделать. Есть мысли?

Ответы [ 3 ]

1 голос
/ 22 марта 2009

Я не знаю, делаете ли вы это, но вам нужно указать строку вместо объекта при использовании fields_for. Я не вижу кодов, которые у вас есть в вашей части, так что я могу быть далеко. Во всяком случае, способ, которым я делаю это в помощнике:

def fields_for_target(target, &block)
  prefix = target.new_record? ? 'new' : 'existing'
  fields_for("location[#{prefix}_target_attributes][]", target, &block)
end
0 голосов
/ 29 июля 2009

Легко. Посмотри вверх accepts_nested_attributes_for. :)

0 голосов
/ 06 марта 2009

Этот вопрос обсуждается здесь:

http://wonderfullyflawed.com/2009/02/17/rails-forms-microformat/

Но похоже, что это решение для рельсов 2.3 (не вариант для меня). В основном, я хочу форму, которую они разместили на сайте:

<input name="creator[widget_attributes][0][id]" />
<input name="creator[widget_attributes][0][name]" />
<input name="creator[widget_attributes][0][price]" />

<input name="creator[widget_attributes][1][id]" />
<input name="creator[widget_attributes][1][name]" />
<input name="creator[widget_attributes][1][price]" />

Просто какой-то способ создать уникальный идентификатор для каждой цели (или в данном случае атрибута виджета), который я хочу добавить. Довольно сложно, учитывая, что с jscript добавлена ​​новая цель. Я чувствую, что для рельсов должен быть какой-то способ автоматически сделать это для меня

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