开发者

Prettier code in Ruby

Is there a prettier version for this snippet of code?

@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'
开发者_如何学C

Thank you!


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

Or it would be even prettier if you put some logic into the model:

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'


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


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

or

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


This might work if retailer :has_many option_types

@available_option_types = current_user.retailer.options_types unless current_user.has_role? 'admin'
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜