2015-03-31 23 views
0

我试图将Rails2应用移植到Rails4应用程序(!)中。我没有为端口保留一个单独的分支,而是用'if'子句分隔Rails4特定的API。将Rails2中的form_for erb标签移植到Rails4

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| %>因为在轨道2,通过form_for返回的对象没有.to_s方法。

你们知道解决此问题的任何提示吗?

回答

1

尝试将Rails 4代码放入块中。定义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 %>