Ruby on Rails:在Formtastic中更改复选框标签

4
我正在使用formtastic为具有与另一个模型的HABTM关系的对象的模型呈现表单。
我这样做是为了呈现复选框列表:
<%= f.input :classes, :as => :check_boxes, :collection => UserClass.all %>

是的,它会呈现所有的复选框,并在右侧显示对象名称,就像这样。因此,我有类似于以下内容:

[x] #<UserClass:0x000000087e4958>

我该如何更改呢?我想显示班级名称和描述...谢谢。
2个回答

14
使用:member_label选项:
<%= f.input :classes, :as => :check_boxes,
    :collection => UserClass.all, :member_label => :name %>

(假设您的UserClass有一个名为 name 的属性作为例子)。如果您的标签来自多个字段,您可以传递一个Proc。例如(如果您的UserClass具有first_namelast_name属性):

<%= f.input :classes, :as => :check_boxes,
    :collection => UserClass.all,
    :member_label => Proc.new { |u| "#{u.first_name} #{u.last_name}" } %>

以上内容适用于Formtastic 2.x版本。 对于1.2-stable分支,它的工作方式相同(您可以传递一个方法名或proc),但选项称为:label_method。 示例:

<%= f.input :classes, :as => :check_boxes,
    :collection => UserClass.all, :label_method => :name %>

谢谢您的快速回答。我已经尝试过那个方法,还有:value_method,但我仍然看到#UserClass:0x000000087e4958。您有什么想法吗? - Hommer Smith
@HommerSmith,在1.2中该选项被称为:label_method。我已更新我的答案来包括它。 - Ben Lee
太棒了!他们为什么把那个选项的名字改得这么多啊?:P - Hommer Smith
@HommerSmith,从版本1到版本2的过渡中,代码被大量削减和重构。只是风暴中的一次变化。 - Ben Lee

-1

从标签中删除渲染。 使用<%代替<%=

感谢@HommerSmith澄清了关于旧版本中使用和上述示例的使用位置。


@HommerSmith,Galuga是正确的。在1.2版本中,您省略了=,渲染已经构建完成。但是请参阅我的答案,了解如何在1.2中实现您想要的功能。 - Ben Lee
@HommerSmith,嗯...我以为它会自动渲染,但如果不是的话,那就继续使用<%=吧 ;) - Ben Lee
1
@HommerSmith,实际上算了吧。你一开始就是对的,你确实需要<%=,只是在form.inputs中省略了它,而不是在form.input中。但请注意,这与较新版本不同,在较新版本中,即使在form.inputs中也要使用<%= - Ben Lee
@Ben Lee 好的。感谢您的时间和准确的回答。 - Hommer Smith

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