2009-08-13 26 views
1

使用Rails,我想添加:<span class='req'>&bull;</span>在我的<label>標記內我的意見,如果我在label窗體幫助器上設置一個選項;即如果設置了特定選項,如何添加'required'以形成標籤?

<%= f.label :address_1, "Address 2:", :req => true -%>

應出示:

<label for="model_address_1"><span class='req'>&bull;</span> Address 1:</label>

而不是:

<label for="model_address_1" req="true">Address 1:</label>

象現在這樣。我意識到我可能必須重寫默認的表單生成器或創建我自己的表單生成器,但不知道如何執行此操作。有什麼建議麼?提前致謝!

更新:我在試圖幹起來我的代碼這樣做,我意識到我可以只粘貼span片段上方到所有標籤中所有的我的意見,但我想避免那。

回答

2

這是未經測試的,但沿着這些線應該工作。

# in lib/labeled_form_builder.rb 
class LabeledFormBuilder < ActionView::Helpers::FormBuilder 
    def label(field_name, label = nil, options = {}) 
    if options.delete(:req) 
     label ||= field_name.to_s.humanize 
     label = @template.content_tag(:span, "&bull;", :class => "req") + " " + label 
    end 
    super(field_name, label, options) 
    end 
end 

,然後使用該設計器視圖

<%= form_for @item, :builder => LabeledFormBuilder do |f| %> 

,我細講上創建表單建設者您可能會感興趣我Mastering Rails Forms screencast series的第3集。

+0

作品對待瑞安,非常感謝!我會檢查屏幕截圖:-) – Gav 2009-08-13 19:34:57

+0

這對於Rails 2非常適用,但是在Rails 3中,輸出會被轉義出來,並且看起來像 詳細信息 * 我試過把#raw方法在不同的地方,沒有運氣。有沒有人得到類似這樣的工作與Rails 3? – mysmallidea 2011-01-28 20:07:22

0

對ryanb的小改動讓它在Rails 3中工作。你只需要告訴content_tag不要逃避子彈。

class LabeledFormBuilder < ActionView::Helpers::FormBuilder 
    def label(field_name, options = {}, label = nil) 
    if options.delete(:req) 
     label ||= field_name.to_s.humanize 
     label = @template.content_tag(:span, "&bull;", {:class => "req"}, false) + " " + label 
    end 
    super(field_name, label, options) 
    end 
end 
相關問題