4

我最初将此作为问题发布在 nested_form 上,但没有任何见解。详细信息在这里:https ://github.com/ryanb/nested_form/issues/66

回顾:

我有一个稍微不寻常的要求,这意味着我在添加/删除嵌套模型时需要尊重acts_as_list 的位置。

  class Journey < ActiveRecord::Base
     has_many :legs, :dependent => :destroy
     accepts_nested_attributes_for :legs, :allow_destroy => true
   end

  class Leg < ActiveRecord::Base
     belongs_to :journey
     acts_as_list :scope => :journey
   end

我不认为这很奇怪——我的旅程有一个目的地,它们的顺序决定了起点和终点。

当然,这意味着我不能使用 f.link_to_add 和 f.link_to_remove 的标准助手,因为它们是表单级助手,我希望助手与嵌套表单坐在一起。我可以处理 JS 来更新后续腿的位置没问题,但我想知道是否已经有一种既定的方法可以做到这一点,或者我是否需要分叉,构建新的助手然后发出拉取请求?我在想像能够做的事情:

<%= f.link_to_add_inline "Add leg", :legs, :after => current_leg.position %>

想法?

从那时起,我一直在修补自己的助手,只要我想添加一条腿,它就会将表单保留回来,并使用acts_as_list insert_at_position 方法。这感觉很hacky,虽然不是很优雅。有什么东西可以使这更容易或更优雅的方法。本质上,我希望能够:

  1. 在列表中的任何现有腿之间或列表末尾添加腿
  2. 理想情况下,在用户保存表单之前不必将对象保存到数据库
  3. 当然,仍然能够加入acts_as_list 提供的可排序内容和其他优点。

建议?

4

0 回答 0