新手问题 多表查询问题

ckl · 2014年07月11日 · 最后由 ckl 回复于 2014年07月11日 · 1693 次阅读
class A< ActiveRecord::Base
  def self.select_name
   --------不知道怎么写
  end
end
class B< ActiveRecord::Base

end
class C< ActiveRecord::Base

end

A
    card:string
    is_b:0 or 1

B:
    name:string
    card:string
C:
    realname:string
    card:string

实现@test=A.select_name(params[:name])
通过A从B/C表中找到name为params[:name]的模糊搜索card为关联字段is_b为判断是否为B表

万恶的表结构!大神请帮忙!谢谢大家啦!

先看看 SQL 语句怎么写

SELECT a.*
FROM a
LEFT OUTER JOIN b ON (a.card = b.card)
LEFT OUTER JOIN c ON (a.card = c.card)
WHERE (b.name LIKE '%sth%' OR c.name LIKE '%sth%')

转成 AR 的代码

A.joins("LEFT OUTER JOIN b ON (a.card = b.card)")
 .joins("LEFT OUTER JOIN c ON (a.card = c.card)")
 .where("b.name LIKE ? OR c.name LIKE ?", ['%sth%', '%sth%'])

LEFT OUTER JOIN 要注意表数据的量

#1 楼 @hz_qiuyuanxin 非常感谢你!谢谢

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