Rails Rails has_many 定义问题

ksegg · 2019年05月28日 · 最后由 ksegg 回复于 2019年05月29日 · 1740 次阅读

想实现效果:prevdetail_tmps 与 m_selectlist 关联后,按照 prevdetail_tmps.day_from, m_selectlists.sort_no 排序

下面的写法会报错:

has_many :prevdetail_tmps, -> { includes(:m_selectlist).order('day_from, m_selectlists.sort_no') }, :dependent => :destroy

错误信息:

SELECT "prevdetail_tmps".* FROM "prevdetail_tmps"  WHERE "prevdetail_tmps"."del_flg" = 0 AND "prevdetail_tmps"."shain_tmp_id" = $1  ORDER BY day_from, m_selectlists.sort_no

请问 has_many 的参数 includes 和 order 应该怎么写?

这错误信息就不全吧,这 SQL 后面应该还有些信息的啊

用 eager_load

这样?猜的。

has_many :prevdetail_tmps, :dependent => :destroy

scope :my_order, -> { includes(:prevdetail_tmps).order('prevdetail_tmps.day_from, m_selectlists.sort_no') }

错误信息里没有LEFT OUTER JOIN m_selectlists,说明m_selectlists表没有被连接,
你的PrevdetailTmpmodel 里有声明 belongs_to :m_selectlist了吗?

照 2 楼说的用 eager_load。

includes 不一定会用一条语句同时查询出关联表,它会根据情况自己选择是否 join 关联表。

用 eager_load 则一定会,用 preload 会强制分成两条查询语句。

mizuhashi 回复

eager_load 完美解决,多谢

adamshen 回复

多谢,eager_load 完美解决

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