2012-09-16 46 views
3

大小我看到自己寫了很多的:size => nilf.text_field像這樣:刪除默認:從form.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將使用size="some number"(通常爲size="30")呈現<input>,這是我不需要或不需要的。

所以,我怎麼能實現幹,讓這個f.text_field不會默認生成的size=30size="some number"屬性?這樣我可以避免總是輸入:size => nil

+0

在ApplicationHelper中覆蓋'form' – apneadiving

回答

4

所有默認選項字段存儲在一個哈希值。默認如下:

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

例如,您可以在初始化程序中從它中刪除「size」。

ActionView::Helpers::InstanceTag::DEFAULT_FIELD_OPTIONS.delete("size") 
+0

非常好!這是有效的,應用範圍很廣,只需將大小刪除添加到我創建的'config/initializers/modify_form_defaults.rb'中即可輕鬆實現。 – Darep

+0

真的很不錯的解決方案 – apneadiving

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) 
4

Rails擴展Object類與with_options method。你可以利用它:

<%= 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! --> 
+0

謝謝!我也喜歡這種方法。 「尺寸」的去除在視圖中被清楚地描述,而不是「在一些初始化器中隱藏的方式」。 但是,隨着形式沉重的應用程序(如我們在這裏構建),這不會實現幹100%,所以我更喜歡謝苗的答案:) – Darep

0

Rails的團隊已經因爲刪除這些默認爲4.0.x版本。無法再設置全局默認值。唯一簡單的解決方案是使用CSS設置尺寸。