Rails中的collection_check_boxes如何设置多个列名或自定义标签?

5

我有一个在Rails中使用collection_check_boxes方法的form_for,用于显示一个部件的数组,并将其列出为复选框。我希望每个部件的复选框标签是两个方法的组合,以便每个部件的复选框都标注有它的名称和SKU号码:

我的表单代码:

<%= collection_check_boxes(:service, :part_ids, @parts_list, :id, :sku, {}, {checked: true}) %>

这很完美地创建了一个复选框列表。但是,每个标签只是:sku,因为我只能为标签传递一个方法。有人知道如何为这些创建自定义标签的方法吗?我已经阅读了api文档,并提到使用do |b| ... end块,但没有解释如何使用或为什么使用。

2个回答

10

这是修改后的表单代码:

<%= collection_check_boxes(:service, :part_ids, @parts_list, :id, :sku, {}, {checked: true}) do |b| 
  b.label { b.check_box + b.object.name + " " + b.object.sku} 
end %>

注意: b.object.name #### 假设name是您模型中的字段名 b.object.sku #### 如果sku是数字字段,请用b.object.sku.to_s替换。


3
您可以在您的模型中定义一个自定义字段:
def cb_label
    "#{name} #{sku}"
end

并且在集合中

<%= collection_check_boxes(:service, :part_ids, @parts_list, :id, :cb_label, {}, {checked: true}) %>

Kirti的回答对我的问题是正确的,尽管在得到答案之前,我想尝试一下上面的别名方法,它也完全正常。如果我在许多不同的地方调用名称/ sku组合,我会使用您的答案,因为它更容易。因此点赞。 - Beartech

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接