3

私は自分が多くのことを書いているのを見:size => nilますf.text_field:

<%= f.text_field :street_address, :size => nil %>
<%= f.text_field :post_code, :size => nil %>
<%= f.text_field :city, :size => nil %>

これはばかげています。上記がないと:size => nil、 text_field は、必要のない、または必要のない(通常は) をレンダリング<input>します。size="some number"size="30"

では、DRY を実装して、デフォルトでor属性をf.text_field生成しないようにするにはどうすればよいでしょうか? このようにして、常に入力する必要がなくなります。size=30size="some number":size => nil

4

4 に答える 4

4

すべてのデフォルトのフィールドオプションは、1つのハッシュに格納されます。デフォルトは次のとおりです。

# action_view/helpers/form_helper
DEFAULT_FIELD_OPTIONS = { "size" => 30 }

たとえば、初期化子で「サイズ」を削除できます。

ActionView::Helpers::InstanceTag::DEFAULT_FIELD_OPTIONS.delete("size")
于 2012-09-16T10:55:07.800 に答える
4

Rails は Object クラスをwith_optionsmethodで拡張します。あなたはそれを利用することができます:

<%= form_for :foo do |f| %>
    <% f.with_options :size => nil do |f_nil| %>
        <%= f_nil.text_field :street_address %>
        <%= f_nil.text_field :post_code %>
        <%= f.text_field :city %> <!-- you can use old f here too! -->
    <% end %>
<% end %>

与えます:

<input id="foo_street_address" name="foo[street_address]" type="text" />
<input id="foo_post_code" name="foo[post_code]" type="text" />
<input id="foo_city" name="foo[city]" size="30" type="text" /> <!-- you can use old f here too! -->
于 2012-09-16T11:08:03.490 に答える
0

その後、Rails チームは、バージョン の時点でこれらのデフォルトを削除しまし4.0.xた。グローバルなデフォルトを設定する方法もありません。唯一の簡単な解決策は、CSS を使用して寸法を設定することです。

于 2016-09-15T22:59:32.977 に答える
0

次のように text_field をカプセル化してみてください。

def no_size_text_area(form, method) form.text_area(method, {:size => nil}) end

関数をヘルパー ファイルに入れます。

そして、その場所で no_size_text_area を次のように使用します。

no_size_text_area(f,:city)
于 2012-09-16T10:21:49.897 に答える