加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 复杂范围,Rails 3

发布时间:2020-12-17 03:35:07 所属栏目:百科 来源:网络整理
导读:所以我正在构建一个匹配用户的应用程序.用户模型有3个属性(无论如何都与我的问题相关:性别:字符串,looking_for_men:布尔值,looking_for_women:布尔值. 目前我的模型中有一个方法如下: def browse if self.looking_for_men == true self.looking_for_wom
所以我正在构建一个匹配用户的应用程序.用户模型有3个属性(无论如何都与我的问题相关:性别:字符串,looking_for_men:布尔值,looking_for_women:布尔值.

目前我的模型中有一个方法如下:

def browse
  if self.looking_for_men == true && self.looking_for_women == true
    if self.sex == "Male"
      User.where("looking_for_men = ?",true)
    elsif self.sex == "Female"
      User.where("looking_for_women = ?",true)
    end
  elsif self.sex == "Male" && self.looking_for_men == true
    User.where("looking_for_men = ? AND sex = ?",true,"Male")
  elsif self.sex == "Female" && self.looking_for_women == true
    User.where("looking_for_women = ? AND sex = ?","Female")
  else
    if self.sex == "Male"
      User.where("looking_for_men = ? AND sex = ?","Female")
    elsif self.sex == "Female"
      User.where("looking_for_women = ? AND sex = ?","Male")
    end
  end
end

你可以说,这非常混乱.无论如何要清理它并将它变成一个范围,所以例如我说我是一个男性用户,我正在寻找女性,它只返回正在寻找男性的女性,当我这样做一个查询时:

@users = User.all.browse

解决方法

我只是做下面的代码,使其更具可读性.但不知何故,我对这个解决方案并不完全满意.还是很多代码:

class User < ActiveRecord::Base
  scope :male,where(:gender => "Male")
  scope :female,where(:gender => "Female")
  scope :looking_for_men,where(:looking_for_men => true)
  scope :looking_for_women,where(:looking_for_women => true)

  def browse
    @women = @men = []

    @women = self.interested_females if self.looking_for_women
    @men   = self.interested_males   if self.looking_for_men

    @result = @women.concat(@men)
    @result.delete(self) #removes the user itself from the result-set

    return @result
  end

  def interested_females
    return User.female.looking_for_men   if self.male?
    return User.female.looking_for_women if self.female?
  end

  def interested_males
    return User.male.looking_for_men   if self.male?
    return User.male.looking_for_women if self.female?
  end

  def male?
    return (self.gender == "Male")
  end

  def female?
    return (self.gender == "Female")
  end
end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读