Ruby on rails 在RubyonRails中重构重if语句的有效方法是什么?
重构重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
计划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,使我的可枚举链更易于阅读。我甚至知道要编写自己的类,而不是依赖所有人都喜欢的混乱的嵌套哈希和数组:)