将form_for erb标记从Rails2移植到Rails4

时间:2015-03-31 18:56:00

标签: ruby ruby-on-rails-4 erb

我正在尝试将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| %>,因为在Rails 2中,form_for返回的对象没有{{ 1}}方法。

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

1 个答案:

答案 0 :(得分:1)

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

# application_helper.rb

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

然后在再培训局:

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