Ruby on rails 在RubyonRails中重构重if语句的有效方法是什么?

Ruby on rails 在RubyonRails中重构重if语句的有效方法是什么?,ruby-on-rails,ruby,if-statement,refactoring,code-structure,Ruby On Rails,Ruby,If Statement,Refactoring,Code Structure,重构重if语句的有效方法是什么? 所有建议都受到鼓励 计划1 计划2 计划3 计划4 计划5 计划6 计划7 计划8 您可以使用案例 <% case @user.plan_id %> <% when 1 %> <span class="label label-info">CONTRIBUTOR</span> <% when 2 %> <span class="label label-warning">ELI

重构重if语句的有效方法是什么?

所有建议都受到鼓励


计划1
计划2
计划3
计划4
计划5
计划6
计划7
计划8

您可以使用
案例

<% case @user.plan_id %>
<% when 1 %>
    <span class="label label-info">CONTRIBUTOR</span>
<% when 2 %>
    <span class="label label-warning">ELITE CONTRIBUTOR</span>
<% when 3 %>
     <span class="label label-info">TECHNICIAN</span>
<% when 4 %>
     <span class="label label-warning">ELITE TECHNICIAN</span>
<% when 5 %>
     <span class="label label-info">CENTER</span>
<% when 6 %>
     <span class="label label-warning">ELITE CENTER</span>
<% when 7 %>
     <span class="label label-info">AFFAIR</span>   
<% when 8 %>
      <span class="label label-warning">ELITE AFFAIR</span>
<% end %>

贡献者
精英贡献者
技术员
精英技师
居中
精英中心
风流韵事
精英事件

您可以使用
案例

<% case @user.plan_id %>
<% when 1 %>
    <span class="label label-info">CONTRIBUTOR</span>
<% when 2 %>
    <span class="label label-warning">ELITE CONTRIBUTOR</span>
<% when 3 %>
     <span class="label label-info">TECHNICIAN</span>
<% when 4 %>
     <span class="label label-warning">ELITE TECHNICIAN</span>
<% when 5 %>
     <span class="label label-info">CENTER</span>
<% when 6 %>
     <span class="label label-warning">ELITE CENTER</span>
<% when 7 %>
     <span class="label label-info">AFFAIR</span>   
<% when 8 %>
      <span class="label label-warning">ELITE AFFAIR</span>
<% end %>

贡献者
精英贡献者
技术员
精英技师
居中
精英中心
风流韵事
精英事件

是否参考了
计划
模型?如果没有,我建议创建一个,带有
label
属性和
elite
标志。那么,你的声明是:

<span class="label label-<%= @user.plan.elite ? 'warning' : 'info' %>}">
  <%= @user.plan.label %>
</span>

是否参考了
计划
模型?如果没有,我建议创建一个,带有
label
属性和
elite
标志。那么,你的声明是:

<span class="label label-<%= @user.plan.elite ? 'warning' : 'info' %>}">
  <%= @user.plan.label %>
</span>

定义助手方法:

def plan_hash
  {
    1 => { :klass => "label-info",    :description => "Plan1" },
    2 => { :klass => "label-warning", :description => "Plan2" },
    3 => { :klass => "label-info",    :description => "Plan3" },
    4 => { :klass => "label-warning", :description => "Plan4" },
    5 => { :klass => "label-info",    :description => "Plan5" },
    6 => { :klass => "label-warning", :description => "Plan6" },
    7 => { :klass => "label-info",    :description => "Plan7" },
    8 => { :klass => "label-warning", :description => "Plan8" }
  }
end
那么,在你看来:

<span class="label <%= plan_hash[@user.plan_id][:klass] %>"><%= plan_hash[@user.plan_id][:description] %></span>

定义助手方法:

def plan_hash
  {
    1 => { :klass => "label-info",    :description => "Plan1" },
    2 => { :klass => "label-warning", :description => "Plan2" },
    3 => { :klass => "label-info",    :description => "Plan3" },
    4 => { :klass => "label-warning", :description => "Plan4" },
    5 => { :klass => "label-info",    :description => "Plan5" },
    6 => { :klass => "label-warning", :description => "Plan6" },
    7 => { :klass => "label-info",    :description => "Plan7" },
    8 => { :klass => "label-warning", :description => "Plan8" }
  }
end
那么,在你看来:

<span class="label <%= plan_hash[@user.plan_id][:klass] %>"><%= plan_hash[@user.plan_id][:description] %></span>

这是帮助器模块的作业,类似于:

module UserPlanHelper
  PLANS = {
    1 => [ "info", "Plan1" ],
    2 => [ "warning", "Plan2" ],
    3 => [ "info", "Plan3" ],
    4 => [ "warning", "Plan4" ],
    5 => [ "info", "Plan5" ],
    6 => [ "warning", "Plan6" ],
    7 => [ "info", "Plan7" ],
    8 => [ "warning", "Plan8" ]
  }

  def plan_details(plan_id)
    yield(PLANS[plan_id])
  end
end
如果在控制器中使用,则可将代码简化为:

<%= plan_details(@user.plan_id) do |label_class, label| %>
  <span class="label label-<%= label_class %>"><%= label %></span>
<%- end %>

这是帮助器模块的作业,类似于:

module UserPlanHelper
  PLANS = {
    1 => [ "info", "Plan1" ],
    2 => [ "warning", "Plan2" ],
    3 => [ "info", "Plan3" ],
    4 => [ "warning", "Plan4" ],
    5 => [ "info", "Plan5" ],
    6 => [ "warning", "Plan6" ],
    7 => [ "info", "Plan7" ],
    8 => [ "warning", "Plan8" ]
  }

  def plan_details(plan_id)
    yield(PLANS[plan_id])
  end
end
如果在控制器中使用,则可将代码简化为:

<%= plan_details(@user.plan_id) do |label_class, label| %>
  <span class="label label-<%= label_class %>"><%= label %></span>
<%- end %>


use语句。可能重复的尝试搜索stackoverflow use语句。可能重复的尝试搜索stackoverflow如果
klass
description
之间存在某种相关性,我可以重构helper方法。由于用户没有这样指定任何内容,因此我将其保持为简单明了的形式。:)如果
klass
description
之间存在某种关联,我可以重构helper方法。由于用户没有这样指定任何内容,因此我将其保持为简单明了的形式。:)小问题:将
yield
添加到
plan\u details
方法的目的/好处是什么?@UtsavKesharwani这意味着您可以将其构造为
plan\u details(…)do
,内部带有块,而不必创建局部变量。
yield
似乎在Ruby的框架级代码之外被奇怪地利用不足。或者也许这只是我最后看的代码。@muistooshort我一直在使用它,但我确实更喜欢使用它来进行准函数式编程。这里也一样。还有许多lambda,使我的
可枚举链更易于阅读。我甚至知道要编写自己的类,而不是依赖于所有人似乎都喜欢的杂乱无章的嵌套哈希和数组:)小问题:向
plan\u details
方法添加
yield
的目的/好处是什么?@UtsavKesharwani这意味着可以将其构造为
plan\u details(…)在Ruby中,除了框架级代码之外,
yield
似乎没有得到充分利用。或者也许这只是我最后看的代码。@muistooshort我一直在使用它,但我确实更喜欢使用它来进行准函数式编程。这里也一样。还有许多lambda,使我的
可枚举链更易于阅读。我甚至知道要编写自己的类,而不是依赖所有人都喜欢的混乱的嵌套哈希和数组:)