2011-11-07 27 views
0
def form_helper(record, *args, &block) 
    options = args.extract_options! 
    form_for(record, *(args << options.merge(:builder => builder))) do |f| 
    f.hidden_field 'hidden', 'key' 
    yield &block 
    end 
end 

如果我有這個輔助,我將如何改變它會的f範圍內進行評估以如此傳遞的塊的範圍?更改紅寶石塊的上下文/結合/範圍(Rails的特定的form_for)

所以,我可以用它喜歡:

<%= form_helper @resource, :builder => SomeFormBuilder do |form| %> 
    Some stuff 
<%- end %> 

但它輸出的隱藏字段,並在該塊任何其他。由於我只是添加隱藏字段,我不想創建自定義表單構建器,而是指定一個不同的表單構建器。

回答

1

正確的方法是像這樣調用塊:block.call(f)並使用concat作爲其他字段。

form_for(record, *(args << options.merge(:builder => builder))) do |f| 
    block.call(f) 
    concat hidden_field_tag 'key', "#{key}/${filename}" 
    concat hidden_field_tag 'AWSAccessKeyId', "#{access_key}" 
    concat hidden_field_tag 'acl', "#{acl}" 
    concat hidden_field_tag 'success_action_redirect', "#{redirect}" 
    concat hidden_field_tag 'policy', "#{policy}" 
    concat hidden_field_tag 'signature', "#{signature}" 
    end