2010-11-10 48 views
14

爲什麼此代碼在文本區域顯示錯誤?在Rails窗體中使用textarea助手

<%= form_for(:ad, :url => {:action => 'create'}) do |f| %> 
    <%= f.text_field(:name) %> 
    <%= f.text_area_tag(:text, "", :size => "50x10") %> 
    <%= submit_tag("Submit") %> 
<% end %> 

回答

25

FormHelper方法是text_area,不text_area_tag

使用下面的任一:

<%= f.text_area(:text, size: '50x10') %> 

或:

<%= text_area_tag(:ad, :text, size: '50x10') %> 
+0

我有這個問題wrong number of arguments (3 for 2) maria 2010-11-10 04:10:05

+0

@maria當與表單構建器一起使用時,該方法只接受兩個參數。查看更新的答案。 – meagar 2010-11-10 04:21:23

5

f變量正在創建的第一行是您FormBuilder參考。默認情況下,它引用ActionView::Helpers::FormBuilder或者您可以創建自己的。

textareas的FormBuilder助手叫做text_area。 FormBuilder助手比普通的HTML助手更聰明。 Rails模型可以邏輯嵌套,並且可以編寫表單來反映這一點; FormBuilder助手所做的主要事情之一是跟蹤每個特定字段與數據模型的關係。

當你調用f.text_area,因爲f與一個名爲:ad表單關聯和字段命名爲:text它會生成一個名爲ad[text]場。這是一個參數約定,將自動分析到服務器上的一個Hash:{ :ad => { :text => "value" } }而不是一個平坦的參數列表。這是一個巨大的便利,因爲如果您有一個名爲Ad的型號,您可以簡單地撥打Ad.create(params[:ad]),並且所有字段都將被正確填寫。

text_area_tag是未自動連接到表單的通用幫助程序。您仍可以使其與FormBuilder#text_area執行相同的操作,但您必須手動執行此操作。這在FormBuilder幫助程序無意涵蓋的情況下非常有用。