Rails 一个 activerecord 的问题

bwlinux · 2014年06月19日 · 最后由 bwlinux 回复于 2014年06月22日 · 2076 次阅读

我有这样两个 models。

class User < ActiveRecord::Base
  attr_accessible :group_id, :score
  belongs_to :group
  scope :upgrade, -> { where("groups.e_score < ?", :score) } # 有错误
end

class Group < ctiveRecord::Base
  attr_accessible: e_score
  has_many :users
end

列出所有的 users,如果 user 的 score 大于他所在的 group 的 e_score,如果用 scope 来表示,我不知道怎么在一个 model 里边去使用另外一个 model 里边的属性?

1 楼 已删除

抱歉理解有误

楼主没学过数据库 ?

# SQL 查询
SELECT users.*
FROM users
INNER JOIN groups ON (users.group_id = groups.id)
WHERE users.score > groups.e_group
class User < ActiveRecord::Base
  belongs_to :group

  # 用 Rails 的 DSL 来实现上面的 SQL
  scope :upgrade, -> { joins(:group).where("users.score > groups.e_score") }
end

class Group < ActiveRecrod::Base
  has_many :users
end

谢谢 LS。我的疑问主要是 DSL 语法,直接嵌套 SQL 的语句在里边,总觉得不够 rubism。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号