我最初将此作为问题发布在 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,虽然不是很优雅。有什么东西可以使这更容易或更优雅的方法。本质上,我希望能够:
- 在列表中的任何现有腿之间或列表末尾添加腿
- 理想情况下,在用户保存表单之前不必将对象保存到数据库
- 当然,仍然能够加入acts_as_list 提供的可排序内容和其他优点。
建议?