这段代码效率高吗?
Is this block of code efficient?
我试图仅在数据库中已存在的情况下才分配变量 tagcolor。如果颜色存在,此代码会查询数据库两次,一次是确定它是否确实存在,另一次是实际分配它。
如果它不存在,我只想将 tagcolor 分配给用户提供的颜色。
if Tagmap.where("name = ? AND user_id = ?", tag, current_user.id).first.present?
tagcolor = Tagmap.where("name = ? AND user_id = ?", tag, current_user.id).first.color
else
tagcolor = params[:color].downcase
end
我可以减少这个块以便我只查询数据库一次吗?
如果您使用 Rails 4,您可以:
tagcolor = Tagmap.find_by(name: tag, user: current_user).try(:color) || params[:color].downcase
在 Rails 3:
中可以进行类似(但不是那么漂亮)的构造
tagcolor = Tagmap.find_by_name_and_user(tag, current_user).try(:color) || params[:color].downcase
我试图仅在数据库中已存在的情况下才分配变量 tagcolor。如果颜色存在,此代码会查询数据库两次,一次是确定它是否确实存在,另一次是实际分配它。
如果它不存在,我只想将 tagcolor 分配给用户提供的颜色。
if Tagmap.where("name = ? AND user_id = ?", tag, current_user.id).first.present?
tagcolor = Tagmap.where("name = ? AND user_id = ?", tag, current_user.id).first.color
else
tagcolor = params[:color].downcase
end
我可以减少这个块以便我只查询数据库一次吗?
如果您使用 Rails 4,您可以:
tagcolor = Tagmap.find_by(name: tag, user: current_user).try(:color) || params[:color].downcase
在 Rails 3:
中可以进行类似(但不是那么漂亮)的构造tagcolor = Tagmap.find_by_name_and_user(tag, current_user).try(:color) || params[:color].downcase