我想知道在ruby中是否有更简单的方法来执行这两个条件:
if params[:action] == 'index' || params[:action] == 'show'
和
if !(comment = (session[:my_params].include?(:comment) rescue nil)).nil?
提前致谢
答案 0 :(得分:7)
对于第一个,您可以这样做:
if %w(index show).include?(params[:action])
第二个应该重新计算为两行:条件检查中的赋值是代码气味;从来没有理由。
如果您使用的是Rails / ActiveSupport,则可以利用Object#try
comment = session[:my_params].try(:include?, :comment)
if comment
# ... comment is in scope
end
否则,你会留下一些略显笨拙的东西:
comment = session[:my_params].include?(:comment) rescue nil
if comment
# etc
答案 1 :(得分:1)
1:
if ['index','show'].include? params[:action]
2:
if (comment = (session[:my_params].include?(:comment) rescue nil))
第二个条件中的 !
和.nil?
是多余的
但是,实际上,你不应该尽量缩短所有内容,首先要关心的是你的代码对其他人的清晰程度。第二个条件应该是:
if ( comment = (session[:my_params] && session[:my_params].include?(:comment) )
甚至
comment = session[:my_params] && session[:my_params].include?(:comment)
if comment
答案 2 :(得分:0)
第一个可以这样折射:
if ['index', 'show'].include? params[:action]
或
if %w(index show).include? params[:action]
答案 3 :(得分:0)
这应该比使用数组和include?
:
case params[:action]; when 'index', 'show'
...
end
第二个:
if comment = (session.fetch(:my_params, {}).include?(:comment))