Rails Rails has_many 定义问题

ksegg · May 28, 2019 · Last by ksegg replied at May 29, 2019 · 1741 hits

想实现效果: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 会强制分成两条查询语句。

Reply to mizuhashi

eager_load 完美解决,多谢

Reply to adamshen

多谢,eager_load 完美解决

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