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