2

我已经覆盖了标准的 Rails FormHelper,让它以我们的(几乎基于 Bootstrap)格式吐出表单元素(在http://www.likeawritingdesk.com/posts/very-custom-form-b ​​uilders-in-rails 之后)。

它工作正常,但很难为其编写规范。我正在使用这样的规范:

rendered_form = helper.my_custom_form_for(@account, :url => '/accounts') do |f|
  f.inputs do
    # This isn't rendered
    f.text_field 'name', :size => 30 
    # This is rendered
    f.select 'locale', options_for_select([%w(Australia en-AU), %w(UK en-GB)]) 
  end
end

呈现的内容包括选择标签,但不包括文本字段标签。我怀疑这是因为 ActionView 现在处理块的方式,附加块的返回值而不是块中每个语句的返回值。显然,当在应用程序的上下文中使用时,辅助方法会通过一些 ERB 并在该上下文中进行评估。

  1. 我是对的,不可能以这种方式测试渲染辅助方法,在一个块中有多个语句吗?
  2. 如果我是对的,那么在一个完整的应用程序的上下文中,制作一个与助手所做的事情相同的规范的最简单的方法是什么?制作一个 ERB 字符串并以某种方式将其传递给助手进行渲染?
4

1 回答 1

1

你解决了吗?我很好奇您是否只是在返回块中的最后一条语句。您是否尝试过更改 f.text_field/f.select 顺序以查看返回的内容?如果是这样,那么您只需要添加它们:

rendered_form = helper.my_custom_form_for(@account, :url => '/accounts') do |f|
  f.inputs do
    f.text_field('name', :size => 30) +
    f.select('locale', options_for_select([%w(Australia en-AU), %w(UK en-GB)]))
  end
end
于 2013-05-30T17:28:03.267 回答