将 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 %>
我正在尝试将 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 %>