【问题标题】:Fields_for dynamic labelfields_for 动态标签
【发布时间】:2010-03-06 14:51:46
【问题描述】:

我有具有一组值的动态表单。我创建了一个包含我显示的文本字段的部分。在他们每个人旁边,我想显示一个包含文本标题的标签。例如,名字和姓氏以前是不知道的。我该怎么做呢? 似乎我无法直接访问属性。但是当我使用标签字段时,标签中的变量名显示的不是实际值。

【问题讨论】:

  • 你能试着解释一下你想要更好地完成什么吗?也许举个例子?我试图理解以帮助您,但我无法理解您需要什么。
  • 我有一个与一组动态字段 {Name,Value} 具有一对多关系的对象。当用户更新动态字段时,我想将字段名称显示为实际标签而不是硬编码标签。或预定的字符串值。动态表单位于部分数据和所有数据中。片段:_form.erb builder%> {label 需要是该值的动态名称} ...

标签: ruby-on-rails fields-for


【解决方案1】:

好吧!这反映了我对 Rails 的了解程度。您可以通过使用f.object.{attr_name} 来做到这一点,并且成功了。

【讨论】:

  • 你如何使用这个?你的例子中的对象是什么?
【解决方案2】:

f.object.{attr_name} 对我不起作用,但 f.object[:attr_name] 对我起作用。

【讨论】:

  • f.object.first_nameattr_name = 'first_name'; f.object.send(attr_name) 将起作用。 f.object.{attr_name} 是无效的 Ruby 语法。
【解决方案3】:

怎么样:

f.object.send(attr_name)

那将是 Rubyish 的方式。

【讨论】:

  • 你能解释清楚吗?
  • 所有表单构建器都有一个名为 object 的方法,它返回表单正在包装的对象,通常是 ActiveRecord 模型,比如 person。然后我们在那个人上调用send 向它发送消息,所以person.send(:name)person.name 相同。如您所见,使用send 意味着我们不需要硬编码要显示为标签的属性(例如last_name)。所以在上述情况下,attr_name 可以是任何字符串,可以是姓氏、名字、名字等等。
猜你喜欢
  • 2011-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-24
  • 1970-01-01
  • 2018-10-22
  • 2017-12-25
相关资源
最近更新 更多