将 form_for erb 标记从 Rails2 移植到 Rails4

Porting form_for erb tag from Rails2 to Rails4

我正在尝试将 Rails2 应用移植到 Rails4 应用 (!)。我没有为端口保留一个单独的分支,而是用 'if' 子句分隔 Rails4 特定的 API。

if Rails::VERSION::STRING < "4"
    # rails2 specific api call
else
    # rails4 specific api call
end

到目前为止,这对控制器和模型非常有效。但是,我对 Rails2.

erb 有疑问
<% if Rails::VERSION::STRING < "4" %>
    <% form_for(...) do |f| %>
    <% end %>
<% else %>
    <%= form_for(...) do |f| %>
    <% end %>
<% end %>

它失败了,因为在 Rails2 中,erb 也评估了 else 子句并且无法呈现 <%= form_for(...) do |f| %>,因为在 Rails2 中,对象form_for 返回没有 .to_s 方法。

你们知道解决这个问题的任何技巧吗?

尝试将 Rails 4 个代码放入一个块中。在 helper 的某处定义 rails4_stuff:

# application_helper.rb

def rails4_stuff
 yield if Rails::VERSION::STRING < "4"
end

然后在 ERB 中:

<% rails4_stuff do %>
 <% form_for(...) do |f| %>
 <% end %>
<% end %>