如何获取HTML'名称'属性rails表单生成器将为某个字段生成?

时间:2011-02-07 13:42:42

标签: ruby-on-rails forms form-helpers formbuilder

当你有一个这样的表单字段时:

<%= f.text_field :last_name %>

它将在HTML中生成:

<input id="person_last_name" name="person[last_name]" size="30" type="text" />

我想知道是否有任何方法可以获取将要生成的name属性(在本例中为“person [last_name]”)。

想要得到这似乎有点奇怪,但我有理由!我也不会费心去做一个冗长的解释。

4 个答案:

答案 0 :(得分:35)

检查表单对象后,我发现您可以从中获取object_name

所以这对我很有用:"#{f.object_name}[field_name]"

将生成:object[object_attributes][0][field_name]

答案 1 :(得分:9)

嗯,正如预期的那样,你的评论是完全正确的:)

源中发生这种情况的地方是InstanceTag类,所有标记生成都向下钻取。该方法称为tag_name

答案 2 :(得分:3)

ActionView::Helpers::InstanceTag.new(
  ActiveModel::Naming.param_key(@object_in_form_for),
  :your_attribute,
  :this_param_is_ignored
).send(:tag_name)

还有tag_name_with_index属性接受索引作为第一个参数。此外,tag_nametag_name_with_index都有可选参数multiple = false,用于数组(只需将[]添加到生成的名称的末尾)。

最后,如果您需要ID而不是名称 - tag_idtag_id_with_index,则有类似的方法。

答案 3 :(得分:1)

中微子的答案很棒。只是想添加我发现的东西,可能不完全正确。但它对我有用。

在action_view / helpers / form_tag_helper.rb

中查找以下方法
    def sanitized_object_name
      @sanitized_object_name ||= @object_name.gsub(/\]\[|[^-a-zA-Z0-9:.]/, "_").sub(/_$/, "")
    end

希望它有所帮助。