fields_for, чтобы остановить множественное число - PullRequest
0 голосов
/ 16 апреля 2010

У меня есть тег fields_for, в котором я указываю префикс (скажем, по каким-то веским причинам), и он должен представлять отношение один к одному.

Я пытаюсь представить отношение

widget has_many thingamagigs
thingamagig has_one whatchamacallit

Код field_for:

fields_for "widgt[thingamagigs_attributes][][whatchamacallit_attributes]", thingamagig.whatchamacallit do |x|

, который генерирует имена (ошибочно):

widget[thingamagigs_attributes][][whatchamacallit_attributes][][value]

Лучшее решение будет

t.fields_for :whatchamacallit do |x|

, где t = fields_for thingamagig ... Однако, если я сделаю это, будут сгенерированы следующие имена

widgt[thingamagigs_attributes][whatchamacallit_attributes][]

, что совершенно неверно, так как все остальные поля для thingamagig ...

widgt[thingamagigs_attributes][][name]

Так что во всех случаях я облажался.Исходное поле field_for, использующее строку, нельзя использовать с accepts_nested_attributes_for :whatchamacallit, поскольку whatchamacallit - это единственное отношение, а объект ожидается не как массив.Второе fields_for просто не будет работать, потому что rails не может правильно разобрать объект params.Есть ли способ сказать первым формам, чтобы они не добавляли [] после [whatchamacallit_attributes] во все имена полей?

Мое текущее решение состоит в том, чтобы дополнить модель с помощью

def whatchamacallit_attributes=(whatchamacallit_attributes)
  assign_nested_attributes_for_one_to_one_association(:whatchamacallit, whatchamacallit_attributes[0])
end

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

1 Ответ

0 голосов
/ 31 августа 2010
def whatchamacallit_attributes=(whatchamacallit_attributes)
  assign_nested_attributes_for_one_to_one_association(:whatchamacallit, whatchamacallit_attributes[0])
end

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

...