gpt4 book ai didi

ruby-on-rails - Ruby on Rails 4 fields_for 重复次数

转载 作者:太空宇宙 更新时间:2023-11-03 18:13:49 27 4
gpt4 key购买 nike

我想显示一个表单,其中包含四个用于关联对象的嵌套字段集。我发现的唯一方法是覆盖 initialize 方法并定义四个关联:

ruby

def initialize(attributes = {})
super
4.times { items << Item.new }
end

然后正常显示嵌套字段:

汉字

= f.fields_for :items do |item|
= render 'item_fields', f: item

当我尝试编辑已存在且关联项目数量较少的对象时,这不起作用。

我们将不胜感激。

更多信息:

Order has_many items
OrderSet has_many orders

订单是通过cocoon gem 添加的(每组至少有一个订单)

每个订单应始终有四件商品。但是当项目较少时,我不想保存空记录,而是只想将剩余项目显示为空。

最佳答案

初始化不是每次创建新的 Order 实例时执行的地方,这意味着:也在从数据库中检索现有订单时执行。

恕我直言,风景也不是最佳位置。

我会在 Controller 中解决这个问题:

def new
@order = Order.new
4.times { @order.items.build }
end

然后您可以保留模型/ View 的原样。

如果你总是想显示 4 个嵌套项目,你可以在编辑操作中做类似的事情(最多填充 4 个)

def edit
@order = Order.find(params[:id])
(@order.items.length...4).each { @order.items.build }
end

在我个人看来,这比在 View 中这样做更干净。

[编辑:显然它是一个双重嵌套形式]

因此,在您的评论中您澄清了它是一个双层嵌套形式,在这种情况下,我会使用 :wrap_object选项如下(在这里写一个像样的例子有点困难,没有你提供更多细节,所以我保持简短并希望它很清楚)。我猜你有一个“something”的表单,其中有一个 link_to_add_association 用于 :orders,并且该订单需要有几 (4) 个项目,所以你可以做一些事情喜欢:

= link_to_add_association('add order', f, :orders,
:wrap_object => Proc.new { |order| 4.times { order.items.build}; order })

关于ruby-on-rails - Ruby on Rails 4 fields_for 重复次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29471462/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com