對不起這個noob問題,我只是無法理解的Ruby/Rails語法,對方法的返回值和參數做題後
在軌2.x中,我讀了下面的代碼,
def localized_input_form_for(record_or_name_or_array, *args, &proc)
options = args.extract_options!
args << options.merge(:builder=>LocalizedFormBuilder)
concat('<div class="inputbox">')
form_for(record_or_name_or_array, *args, &proc)
concat('</div>')
end
上述函數返回什麼?它不應該是最後一行語句concat('</div>')
的返回值嗎?
在的意見,我也有,
<% localized_input_form_for(@customer) do |f| %>
什麼是在上面的代碼中樓是相同˚F爲form_for(xx) do |f|
?
下面的代碼工作沒有問題,
<%= f.text_field :name, :required => true, :size => 30,:class =>'ime_on' %>
在軌道4,我做了如下修改,
def localized_input_form_for(record_or_name_or_array, *args, &proc)
options = args.extract_options!
args << options.merge(:builder=>LocalizedFormBuilder)
concat('<div class="inputbox">'.html_safe)
concat(form_for(record_or_name_or_array, *args, &proc))
concat('</div>'.html_safe)
end
無需添加CONCAT出來的form_for,而無需添加html_safe,原代碼只是沒有工作。現在
,一切仍然有效,該
<% localized_input_form_for(@customer) do |f| %>
作品沒有問題,是完全一樣的前所示的形式。那麼現在這個函數的返回值是什麼?以及上面的f是什麼?
唯一不同的是,原來的選項
<%= f.text_field :name, :required => true, :size => 30,:class =>'ime_on' %>
它們,必需:true,大小:30,和類: 'ime_on' 不顯示在最終的HTML!
生成下面,
<input type="text" value="abc" name="customer[name]" id="customer_name">
沒有大小,類等的選項。 rails 2.x生成的html確實有這些選項。
我只是對差異感到困惑。而且我也不明白爲什麼原始軌道2.x和軌道4都工作(| f |反映form_for生成的形式,所以f.text_field將從數據庫中獲得正確的值)。
什麼類是嗎? – sawa
該方法位於helper類中,位於「Module ApplicationHelper 」中。還有一個localized_form_builder助手,但我認爲它只是修改瞭如何生成標籤的方式,它不包含text_field上的任何代碼。 – user534498
據我所知''concat'強制輸出到最終的渲染視圖,它不會被返回。這有點像瀏覽器的「puts」。 – tadman