我有三个数据库布尔列google
,yahoo
,bing
。我需要像这样在html.erb页面上打印它们。
"google + yahoo + bing"
如果这三个都是true
。"google + yahoo"
如果只有google
和yahoo
为true
。"google"
如果google
只有true
。有没有有效的方法来实现这个?如果我以传统方式进行,那么if .. else
条件就会很大。
答案 0 :(得分:4)
这个怎么样?
def result
%w[google yahoo bing].keep_if {|m| obj.public_send(m) }.join(' + ')
end
答案 1 :(得分:2)
您可以将值推入数组并加入它们,就像这样
search_engines = []
search_engines << 'google' if google
search_engines << 'yahoo' if yahoo
search_engines << 'bing' if bing
search_engines.join(' + ')
不建议将其直接放在视图中,有两个选项
将此代码拉入相应的view_helper方法,并在视图中调用该方法。
如果这段代码不仅在视图中使用,而且还有业务逻辑,您可以将此代码拉入模型,然后您可以使用实例调用此方法。
例如:obj.search_engines.join(&#39; +&#39;)(假设方法的名称是search_engines而你只从方法中返回一个数组)
答案 2 :(得分:1)
使用辅助方法,
module ApplicationHelper
def get_platform(obj)
straray = []
strarray << 'google' if obj.google
strarray << ' + ' if obj.google && obj.yahoo
strarray << 'yahoo' if obj.yahoo
strarray << ' + ' if obj.yahoo && obj.bing) || (obj.google && obj.bing)
strarray << 'bing' if obj.bing
strarray.join
end
end
拨打此= get_platform(obj)
答案 3 :(得分:1)
假设您有my_object
个对象,
%i(google yahoo bing).map do |engine|
engine if my_object[engine]
end.compact.join(' + ')
此解决方案可轻松扩展到任意数量的引擎。
答案 4 :(得分:0)
一种可能的解决方案(假设您的对象是@m)
<%= "#{'google' if @m.google}" +
"#{' + ' if @m.google && @m.yahoo}" +
"#{'yahoo' if @m.yahoo}" +
"#{' + ' if (@m.yahoo && @m.bing) || (@m.google && @m.bing)}" +
"#{'bing' if @m.bing}"
%>
答案 5 :(得分:-3)
(google && yahoo)? ? "google + yahoo" : ((google && yahoo && bing))? ? "google + yahoo + bing" : (google)? ? "google" : "none"
使用三元运算符,但它有点复杂