【问题标题】:case statement inside of partial stops partial from working but works outside of partial部分内的 case 语句停止部分工作,但在部分外工作
【发布时间】:2016-01-15 19:05:27
【问题描述】:

这是一个很奇怪的问题。我有一个这样调用的部分:

<%= 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 语句:

<% 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 也不会出现。我知道 &lt;% when 'Presenter' %&gt; 代码正在运行,因为 puts 语句有效并且出现了222222,但是为什么其余的内容没有出现?如果我将 case 语句放在部分之外并将其显示在原始代码文件中,那么一切都会正常运行。

【问题讨论】:

  • 我会避免将所有这些逻辑放在您的视图中。但是,这不是重点......
  • 这是您的逐字代码吗?我从这里看不到任何错误,这样的构造通常工作得很好(不管它们是否可取)。你能发布实际的代码吗?也许您在战略位置错过了一些“=”或“%”。 ;)
  • 这是我的实际代码。直接从部分复制和粘贴。
  • 很奇怪。尝试旧的分治法,删除一些行直到它起作用,然后将它们放回...
  • 呵呵,看看这个问题:stackoverflow.com/questions/9603321/…

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


【解决方案1】:

总的来说,这不是编写代码的好方法。很容易把事情搞砸。

在你的助手类中定义一个方法(例如def registration_form_header(type))。把这些逻辑放到helper方法里,用helper方法输出你想要的html,根据输入@type,就可以了:

# 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 %>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-15
    • 1970-01-01
    相关资源
    最近更新 更多