你如何规定一个被覆盖的Rails 3 FormHelper?

时间:2012-10-02 03:28:42

标签: ruby-on-rails-3 twitter-bootstrap rspec2 erb actionview

我已经覆盖了标准的Rails FormHelper,以便在我们(几乎基于Bootstrap的)格式(http://www.likeawritingdesk.com/posts/very-custom-form-builders-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

渲染的内容包括select标记,但不包括文本字段标记。我怀疑这是因为ActionView现在处理块的方式,附加块的返回值而不是块中每个语句的返回值。显然,当在app中的上下文中使用时,helper方法会传递一些ERB并在该上下文中进行求值。

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

1 个答案:

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