4

我正在使用formtastic为与另一个模型具有HABTM关系的模型的对象呈现表单。Ruby on Rails:更改formtastic中的复选框标签

我这样做是为了使复选框列表:

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

是的,它使所有的复选框,并在右侧则显示对象名称,这样的事情。所以我有这样的事情:

[x] #<UserClass:0x000000087e4958> 

我该如何改变这种情况?我想显示课程名称和说明...

谢谢。

回答

13

使用:member_label选项:

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

(假设你的UserClass的有name属性,例如)。如果你的标签来自多个领域,你可以通过一个Proc。例如(如果您有UserClass的和first_name属性last_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稳定的分支,它的工作原理是相同的(您可以传入方法名称或proc),但该选项称为:label_method。示例:

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

感谢您的快速回答。我已经尝试过了,还有:value_method,但我仍然可以看到#。有什么想法吗? – 2012-03-25 23:50:39

+0

我正在使用formtastic 1.2 ... – 2012-03-25 23:59:11

+0

@HommerSmith,在1.2中该选项被称为':label_method'。我更新了我的答案,以表明这一点。 – 2012-03-26 00:08:36

-1

从标记中删除渲染。 使用<%而不是<%=

感谢@HommerSmith清理有关在旧版本中使用以及在哪里使用上述示例的事情。

+0

如果我删除=在<%它不会显示任何复选框... – 2012-03-26 00:10:15

+0

@HommerSmith,Galuga是正确的。在版本1.2中,你省略了'=',渲染是内置的。但也请参阅我的答案,了解如何在1.2中执行所需的操作。 – 2012-03-26 00:11:11

+0

我在1.2,它不是渲染输入,如果我把它关闭... – 2012-03-26 00:13:03