Rails 一个 activerecord 的问题

bwlinux · June 19, 2014 · Last by bwlinux replied at June 22, 2014 · 2076 hits

我有这样两个 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 Floor has deleted

抱歉理解有误

楼主没学过数据库 ?

# 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。

You need to Sign in before reply, if you don't have an account, please Sign up first.