爲什麼此代碼在文本區域顯示錯誤?在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 %>
爲什麼此代碼在文本區域顯示錯誤?在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 %>
的FormHelper
方法是text_area
,不text_area_tag
。
使用下面的任一:
<%= f.text_area(:text, size: '50x10') %>
或:
<%= text_area_tag(:ad, :text, size: '50x10') %>
的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幫助程序無意涵蓋的情況下非常有用。
我有這個問題
wrong number of arguments (3 for 2)
– maria 2010-11-10 04:10:05@maria當與表單構建器一起使用時,該方法只接受兩個參數。查看更新的答案。 – meagar 2010-11-10 04:21:23