部分中的case语句部分停止工作但在部分

时间:2016-01-15 19:05:27

标签: ruby-on-rails ruby ruby-on-rails-4 partials case-when

这是一个非常奇怪的问题。我有一个像这样叫的部分:

<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
    <%= render 'layouts/logged_in/registration_form_header', f: f %>
    ....
<% end %>

部分工作如下:

Here is some text
<% puts "inside the partial %>

puts语句显示在控制台中,并显示文本。如果我添加这样的案例陈述:

<% case @type %>
<% when 'Organization' %>
  its an organization
<% when 'Presenter' %>
      111111
      <% puts "this statement is being evaluated" %>
      <%= "inside the partial" %>
      222222
<% end #case statement for type %> 

在上面的语句中,@type在控制器操作中被定义为"Presenter"。我知道这很有效,因为puts语句在控制台中正确显示。然而,唯一输出到浏览器的文本是222222.“部分内部”字符串不会出现在屏幕上,111111也不会出现。我知道<% when 'Presenter' %>代码正在运行,因为看跌了声明有效并且222222正在出现,但为什么其他内容没有出现?如果我将case语句置于partial之外并将其显示在原始代码文件中,则一切正常。

1 个答案:

答案 0 :(得分:0)

总的来说,这不是编写代码的好方法。如此容易搞砸了。

在助手类中定义一个方法(例如def registration_form_header(type))。将这些逻辑放入helper方法,并使用helper方法根据输入@type输出所需的html,然后就可以了:

# app/helpers/application_helper.rb or any specific helper file
module ApplicationHelper
  def registration_form_header(type)
    ... ...
  end
end

<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
  <%= registration_form_header(@type) %>
  ....
<% end %>