ruby on rails 3 -我可以使用什么模式来修改同一表单上的几个子属性?



我有一个Rails 3.2项目,其中:

Product has_many Descriptions

这些Descriptions有一个description_type和一个language_code。不同类型的Products可以有不同类型和数量的Descriptions,因此类型为"目录will have 4 different Descriptions, where a product of type批发"的Product将只有2个。

在创建Product之后,after_create方法为产品创建不同的descriptions,只填充description_type。这个想法是,用户然后进入并填写不同的描述值。

现在我在这种情况下,我必须动态地建立一些复杂的形式与不同数量的描述,然后通过控制器传递所有这些描述值到ProductDescription上的一些类方法来持久化数据,它只是结束了意大利面无处不在。

我确信我把这个问题想错了。我无法不去想它,因为这是一个我似乎一次又一次把自己放在里面的盒子。

是否有一些模式,我可以应用到嵌套这些子属性在现有表单的问题域?我必须在编辑上这样做,因为我不知道要创建多少字段,直到选择product_type。同样,我愿意用完全不同的方式来做这件事。

我总是遇到这个问题,它把我弄得很困惑。

就在今天,我不得不在我们的应用程序中重建一个成员表单,其中Member属于User,其中有许多PhoneNumber s。

Member型号accepts_nested_attributes_for :userUser型号accepts_nested_attributes_for :phone_numbers

使用茧宝石,我可以在我的成员表单中执行以下操作:

# phone number fields in members/_form.html.haml
# if you do use this on a new (know you said edit but just in case) ... be sure to instantiate the association
# in my case: @member.user.phone_numbers.build 
# u represents the User part of the form ... typically 'f'
= u.simple_fields_for :phone_numbers do |phone|
  = render 'users/phone_number_fields', f: phone
.add-phone-link-wrapper.pull-right
  = link_to_add_association 'Add Phone', u, :phone_numbers, class: 'btn btn-orange btn-mini add-remove-links', partial: 'users/phone_number_fields', render_options: { wrapper: 'bootstrap' }
# 'users/phone_number_fields' partial
.nested-fields
  = f.input :phone
  = f.input :phone_label, as: :select, collection: PhoneNumber::LABELS
  = f.input :display_number, as: :boolean
  = link_to_remove_association 'Remove Phone', f, class: 'btn btn-red btn-mini add-remove-links pull-right', render_options: { wrapper: 'bootstrap' }

注意:我使用SimpleForm和cocoon在实现上有一些差异,这取决于你的表单构建器(都在他们的github页面/wiki上)。

对于我们的需要,这完全符合。

相关内容

  • 没有找到相关文章

最新更新