2010-03-06 110 views
8

我有动态表单,它有一组值。我创建了一个包含我显示的文本字段的部分。在他们每个人旁边,我想显示一个包含文本标题的标签。例如First Name和Last Name以前不会知道。我该如何去做呢? 看来我不能直接访问属性。但是,当我使用标签字段时,标签中的变量名称不会显示实际值。Fields_for动态标签

+0

你可以试着解释一下你想做得更好吗?也许举个例子吧?我试图理解为了帮助你,但我不明白你需要什么。 – Petros 2010-03-06 17:09:16

+0

我有一个与一组动态字段{名称,值}具有一对多关系的对象。当用户更新动态字段时,我想将字段的名称显示为实际标签而不是硬编码标签。或预定的字符串值。动态表单位于部分数据和全部数据中。 Snippets: _form.erb <%f.fields_for:entity_values do | builder | %> <%= render“entity_value_fields”,::f => builder%> <%end% _entity_value_fields.erb <%= f.label:name%> {label必须是该值的动态名称} <%= f.text_field:value%> ... – sebajb 2010-03-06 19:39:15

回答

6

好吧!这反映了我对Rails的新鲜感。你可以通过使用f.object.{attr_name}来完成这个工作。

+0

你如何使用它?你的例子中的对象是什么? – 2012-11-19 16:01:25

5

f.object.{attr_name}没有为我工作,但f.object[:attr_name]没有。

+1

'f.object.first_name'或'attr_name ='first_name'; f.object.send(attr_name)'将起作用。 'f.object。{attr_name}'是无效的Ruby语法。 – Kris 2012-11-21 12:18:51

2

什么:

f.object.send(attr_name) 

这将是Rubyish方式。

+0

你能解释一下吗? – 2012-11-19 16:03:38

+2

所有表单构建器都有一个名为'object'的方法,它返回表单封装的对象,通常是一个ActiveRecord模型,比如person。然后我们给这个人发送'send'来发送一条消息,所以'person.send(:name)'和'person.name'是一样的。正如你所看到的,使用'send'意味着我们不需要对我们想要作为标签显示的属性(例如last_name)进行硬编码。所以在上面的例子中'attr_name'可以是任何字符串,无论是last_name,first_name,whatever。 – Kris 2012-11-21 12:16:11