2011-07-05 9 views
2

このコードのスニペットには、よりきれいなバージョンがありますか?Rubyでもっときれいなコード

@available_option_types.delete_if {|ot| 
    result = true 
    result = current_user.retailer.id != ot.retailer.id if ot.retailer.present? 
    result 
} unless current_user.has_role? 'admin' 

ありがとうございます!

答えて

3
@available_option_types.delete_if { |ot| 
    ot.retailer.present? ? (current_user.retailer.id != ot.retailer.id) : true 
} unless current_user.has_role? 'admin' 

それとも、モデルにいくつかのロジックを置けばそれもきれいになります:has_manyの

@available_option_types = current_user.retailer.options_types unless current_user.has_role? 'admin' 
3
unless current_user.has_role? 'admin' 
    @available_option_types.delete_if do |ot| 
    !ot.retailer.present? || 
     (ot.retailer.present? && 
     current_user.retailer.id != ot.retailer.id) 
    end 
end 
1

これはうまくいくかもしれませんまたは

@available_option_types.select do |ot| 
    ot.retailer.present? && current_user.retailer.id == ot.retailer.id 
end unless current_user.has_role? 'admin' 
2
@available_option_types.delete_if do |ot| 
    !ot.retailer.present? || current_user.retailer.id != ot.retailer.id 
end unless current_user.has_role? 'admin' 

をoption_types:小売業者があれば

class User 
    def same_retailer_with?(option_type) 
    option_type.retailer.present? ? (self.retailer.id != option_type.retailer.id) : true 
    end 
end 

@available_option_types.delete_if { |ot| current_user.same_retailer_with?(ot) } unless current_user.has_role? 'admin' 
関連する問題