0

我有一个 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|

where t = fields_for the thingamagig... 但是,如果我这样做,则会生成以下名称

widgt[thingamagigs_attributes][whatchamacallit_attributes][]

这是完全错误的,因为thingamagig 的所有其他领域都是......

widgt[thingamagigs_attributes][][name]

所以在所有情况下我都搞砸了。使用字符串的原始 field_for 不能使用,accepts_nested_attributes_for :whatchamacallit因为 whatchamacallit 是单数关系,并且对象不应是数组。第二个 fields_for 根本不起作用,因为 rails 无法正确解析 params 对象。有没有办法告诉第一个 forms_for 不要[whatchamacallit_attributes]在所有字段名称中添加 [] ?

我目前的解决方案是用

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

即使使用损坏的表单字段,它也可以使用。但是,这感觉非常hacky,有人有解决方案吗?

4

1 回答 1

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

看起来我必须坚持这个解决方案,因为没有提供其他任何东西。

于 2010-08-31T19:40:35.633 回答