36

次のようなフォーム フィールドがある場合:

<%= f.text_field :last_name %>

これは HTML で生成されます。

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

生成される名前属性 (この場合は "person[last_name]") を取得する方法があるかどうか知りたいです。

手に入れたいと思うのは少し奇妙に思えますが、私には理由があります! また、長い説明を始めるのも面倒です。

4

4 に答える 4

38

フォーム オブジェクトを調べたところ、そこから を取得できることがわかりましobject_nameた。

だからこれは私にとってうまくいった:"#{f.object_name}[field_name]"

生成されるもの:object[object_attributes][0][field_name]

于 2013-10-02T16:54:18.257 に答える
11

さて、予想通り、あなたが持っているコメントは非常に真実です:)

これが発生するソース内の場所は、InstanceTagすべてのタグ生成がドリルダウンするクラスです。このメソッドはtag_nameと呼ばれます。

于 2011-02-07T14:17:40.317 に答える
4
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_nameに、配列に使用されるtag_name_with_indexオプションのパラメーターがあります (生成された名前の末尾に追加するだけです)。multiple = false[]

最後に、名前の代わりに id が必要な場合は、同様の方法がありtag_idますtag_id_with_index

于 2013-11-19T14:26:58.613 に答える
1

ニュートリノの答えは素晴らしいです。私が見つけたものを追加したいだけですが、正確ではないかもしれません。しかし、それは私にとってはうまくいきました。

action_view/helpers/form_tag_helper.rb で以下のメソッドを見つけます

    def sanitized_object_name
      @sanitized_object_name ||= @object_name.gsub(/\]\[|[^-a-zA-Z0-9:.]/, "_").sub(/_$/, "")
    end

それが役に立てば幸い。

于 2011-05-01T20:44:52.517 に答える