更改ruby块的上下文/绑定/范围(特定于Rails的form_for)

时间:2011-11-07 16:03:46

标签: ruby-on-rails ruby block form-for

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的上下文中进行评估?

所以我可以像:

一样使用它
<%= form_helper @resource, :builder => SomeFormBuilder do |form| %>
   Some stuff
<%- end %>

但它会输出隐藏字段以及块中的其他内容。由于我只添加隐藏字段,因此我不想创建自定义表单构建器,而是指定其他表单构建器。

1 个答案:

答案 0 :(得分: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