Как преобразовать этот find_by_sql в named_scope? - PullRequest
1 голос
/ 26 мая 2010

Как я могу превратиться в named_scope?

def self.hero_badge_awardees
        return User.find_by_sql("select users.*, awards.*, badges.badge_type 
          from users, awards, badges 
          where awards.user_id = users.id and badges.id = awards.badge_id and badges.badge_type = 'HeroBadge'")
      end

Ответы [ 2 ]

0 голосов
/ 26 мая 2010

Чтобы конкретно ответить на ваш вопрос, попробуйте это:

class Badge
  has_many :awards
end

class Award
  belongs_to :badge
  belongs_to :user
end

class User
  has_many :awards
  has_many :badges, :through => :awards

  named_scope :hero_badge_awardees,
    :include => [:awards, :badges],
    :conditions => "badges.badge_type = 'HeroBadge'"
end
0 голосов
/ 26 мая 2010
class Badge
  has_many :awards
end

class Award
  belongs_to :badge
  belongs_to :user
end

class User
 has_many :awards
 has_many :badges, :through => :awards
 named_scope :with_badge,
   lambda { |badge_type|
     :include => :badges,
     :conditions => ["badges.badge_type = ?", badge_type]
   }
end

тогда вы можете попробовать:

User.with_badge("HeroBadge")

Похоже, это должно работать для меня, но я не проверял это. Надеюсь, это что-то для вас искрится.

...